对象
大约 2 分钟javascript
类的简单使用
class Pet {
legs = 4;
constructor(sound) {
this.sound = sound;
}
}
const cat = new Pet('Moew!');
cat.legs; // => 4
cat instanceof Pet; // => true
继承与原型
声明字面量对象时候通过设置属性 'proto' 来设置继承关系。注意单词前后是两个下划线 打印对象时只会打印自有属性,继承来的属性要通过行号5的方式访问
function testInherit(){
const pet = {legs:4}
const cat = {sound:'meow',__proto__:pet}
console.log(cat)//打印结果:{sound: 'meow'}
console.log(cat.legs)//打印结果:4
}
合并多个对象
const city={name: 'chongqing', population: '200'}
const location={longitude: '106.55',latitude:'29.56'}
const fullCity={...city,...location}
const u3 = Object.assign(u1,u2);
冻结对象
const octopus = { tentacles:8, color: 'blue'}
Object.freeze(octopus)
octopus.tentacles=10//Error,不会改变
console.log(octopus)//{tentacles:8,color:'blue'}
判断空对象的方法
下面代码返回 true 表示是空对象 - 一般不使用该方法
只有当 const aa={} 判断出来是准确的,如果 const aa=null 则会判断错误
JSON.stringify(obj) === '{}'
遍历属性
下面代码返回 true 表示空对象
let fn = (obj) => {
for(let key in obj){
return false;
}
return true;
}
通过函数 getOwnPropertyNames
如果 const obj=null 则下面代码会判断错误,只有 const obj={} 时判断是准确的
let keys = Object.getOwnPropertyNames(obj);
keys.length === 0 // 表示没有属性,是空对象
keys
let keys = Object.keys(obj);
keys.length === 0 // 0表示没有属性,是空对象
拷贝属性
Object.assign
本方法会修改原始 target 对象的数据,返回的 returnedTarget = target
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
console.log(target);// target: { a: 1, b: 4, c: 5 }
console.log(returnedTarget);// returnedTarget: { a: 1, b: 4, c: 5 }
遍历属性拷贝
function keyMirror (obj) {
if (obj instanceof Object) {
var _obj = Object.assign({}, obj)
var _keyArray = Object.keys(obj)
_keyArray.forEach(key => _obj[key] = key)
return _obj
}
}
获取对象 key 数组
Object.keys(obj)
动态键值对
下面是 typeScript 中声明带有动态键值对的案例代码,其中属性 tmpls 实际一个对象的数组,对象是动态键值对
interface ISubscribeMsgRes {
errCode?:number,errMsg?:string,tmpls?:[{[tmplId:string]:string}]
}
