Object.assign

let obj = Object.assign(targetObj, …sourceObj)
作用:将一个或多个源对象自身的可枚举属性与目标对象的属性合并
返回值:合并后的目标对象

    var obj1 = {name: 'zyp1'}
    var obj2 = {name: 'zyp2', age: 18}
    var obj3 = {name: 'zyp'}
    obj3 = Object.defineProperty(obj3, 'like', {
        value: 'reading'
    })
    var obj4 = {}
    var obj = Object.assign(obj4, obj1, obj2, obj3)
    console.log(obj) //结果为{name: "zyp", age: 18}
    console.log(obj4) //结果也为{name: "zyp", age: 18}    

 

这里还要提一下的是,用扩展运算符也可以实现对象的合并:

    var obj5 = {...obj1, ...obj2, ...obj3}
    console.log(obj5) //结果为{name: "zyp", age: 18}

 

Object.create

let obj = Object.create(protoObj, [propertiesObj])
作用:创建新对象,在创建新对象的同时定义其原型对象(protoObj)以及一些新的属性(propertiesObj,新属性构成的对象,可选)
返回值:创建的新对象

// new Object() 方式创建
var a = {  rep : 'apple' }
var b = new Object(a)
console.log(b) // {rep: "apple"}
console.log(b.__proto__) // {}
console.log(b.rep) // {rep: "apple"}

// Object.create() 方式创建
var a = { rep: 'apple' }
var b = Object.create(a)
console.log(b)  // {}
console.log(b.__proto__) // {rep: "apple"}
console.log(b.rep) // {rep: "apple"}

 

function Person(name, age) {
        this.name = name;
        this.age = age;
    }
    Person.prortotype.sayName = function() {
        alert(this.name)
    }
    function Worker(name, age) {
        Person.call(this, name, age)
    }
    var worker = new Worker('zyp', 18)
    console.log(worker) 

得到的worker对象结果如下图:
在这里插入图片描述

这个符合我们的预期,通过构造函数实现继承的子类实例不会继承父类的原型属性,因此父类的sayName方法并没有被子类对象继承。

  //子类继承父类的原型属性
    Worker.prototype = Object.create(Person.prototype)
    Worker.prototype.constructor = Worker

得到的结果如下:
在这里插入图片描述

 

 

Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for…in 循环遍历该对象时返回的顺序一致 (两者的主要区别是 一个 for-in 循环还会枚举其原型链上的属性)。

 

 

Object.values()

方法返回一个给定对象自己的所有可枚举属性值的数组,值的顺序与使用for...in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。

<script>
    var obj = {
        10: 'a',
        1: 'b',
        2: 'c'
    };
    console.log(Object.values(obj));
    // ['b', 'c', 'a']

    var obj1 = {
        0: 'a',
        1: 'b',
        2: 'c'
    };
    console.log(Object.values(obj1));
    // ['a', 'b', 'c']
</script>

 

posted on 2020-10-20 20:26  京鸿一瞥  阅读(151)  评论(0)    收藏  举报