跳至主要內容

对象

chanchaw大约 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}]
}