Ojbect.create,new,object.asign

239 阅读1分钟
  • Object.create() 会创建一个新的对象,并把新的对象内部的 __proto__ 关联到指定的对象

    let a = {
    	b:1,
    	C(){
    		return b + 1
    	}
    }
    
    let aa = Object.create(a)
    console.log(a,'a')
    console.log(aa.__proto__ 'aa')
    // { b: 1, C: [Function: C] } a
    // { b: 1, C: [Function: C] } aa
    
  • Object.assign ES6 定义了一个实现浅复制的方法。第一个参数是目标对象,之后还可以跟一个或多个目标对象。由于 Object.assign 就是使用=操作符来赋值,所以源对象属性的一些特性不会被复制到目标对象(比如writable)

let obj = {}
Object.defineProperty(obj,"b",{
	value:13,
	writable: true,
	enumerable:false,
	configurable: true
})

console.log(Object.getOwnPropertyDescriptor(obj,'b'))

let newobj = Object.assign({}, obj)
console.log(Object.getOwnPropertyDescriptor(newobj,'b'))
  • new

    通过new创建对象经历4个步骤*

    ​ 1、创建一个新对象;[var o = {};]

    ​ 2、将构造函数的作用域赋给新对象(因此this指向了这个新对象);[Person.apply(o)] [Person原来的this指向的是window]

    ​ 3、执行构造函数中的代码(为这个新对象添加属性);

    ​ 4、返回新对象。

    function bb (){
    	this.bbb = 11,
    	this.cc = function(){
    		return this.bbb + 1
    	}
    }
    let cc = new bb()
    console.log(cc)
    // bb { bbb: 11, cc: [Function] }