对象的新增方法

 对象新增方法

  • Object.is()

   Object.is(value1,value2),判断两个值是否相等,与比较运算符“===”基本一致,但解决了“===”中的一些缺点

console.log(Object.is(100, '100')); //false 类型不同
console.log(Object.is({}, {})); //false 指向不同

  与恒等“===”的不同:

console.log(+0 === -0);  //true
console.log(Object.is(+0, -0));  //false
console.log(NaN === NaN); //false console.log(Object.is(NaN, NaN)); //true

 

  • Object.assign()

   Object.assign(目标对象, 源对象),将指定对象合并至目标对象内部,其实就是内容复制,若属性相同,后面的属性值会覆盖之前属性值,若属性不同,则添加至对象。

let obj1 = {
    name : 'li',
    age : 100
};
        
let obj2 = {
    name : 'wang',
    age : 200
};
        
let obj3 = {
    gender : '男'
};

 console.log(Object.assign(obj1, obj2, obj3));
  console.log(obj1);

  

    只是内容复制一份给obj1,改变的是obj1,obj2和obj3则自身不变:

         console.log(obj2);     

 

  1)如果传入的是非对象内容,则会转换成对象

console.log(Object.assign(obj1,[1,2,3]));

  

 

   2)undefined和null无法转成对象,所以如果它们作为参数,就会报错。

 

  • ES6提供了

    Object.getPrototypeOf(obj) 获取指定对象原型

    Object.setPrototypeOf(obj,prototype) 设置指定对象原型

let obj1 = {
    fn() {
        return 'fn1';
    }
};
        
let obj2 = {
    fn() {
        return 'fn2';
    }
};
// 创建对象f 以obj1对象为原型
let f = Object.create(obj1);
console.log(f.fn());  //fn1
// 判断obj1是否为f的原型
console.log(Object.getPrototypeOf(f) === obj1);  //true
// 设置f的原型对象为obj2
Object.setPrototypeOf(f, obj2);
console.log(f.fn());  //fn2
console.log(Object.getPrototypeOf(f) === obj2);  //true

 

  • super 关键字,用于原型中方法的继承功能。
let obj = {
    fn() {
        return "fn";
    }
};

let f = {
    fn() {
        // return  "extend!";
        // 原型+本身
        return super.fn() + " extend!";
    }
};
// 设置obj为f原型
Object.setPrototypeOf(f, obj);
console.log(f.fn()); //fn extend!
// 再设置h以f为原型
// h也可以继承到f的原型
let h = Object.create(f);
console.log(h.fn()); //fn extend!    

 

posted @ 2021-11-26 21:05  十七日尾  阅读(150)  评论(0)    收藏  举报