-
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.assignES6 定义了一个实现浅复制的方法。第一个参数是目标对象,之后还可以跟一个或多个目标对象。由于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] }