Object.create()
object.create(proto, propertiesObject)
object.create() 是使用指定的原型proto对象及其属性propertiesObject去创建一个新的对象。(mdn)
proto 是必填参数,就是新创建出来的对象的原型 (新对象的 __proto__属性指向的对象),值得注意的是当proto为null的时候创建的新对象完全是一个空对象,没有原型(图一),也就是没有继承Object.prototype上的方法。(如hasOwnProperty() toString() 等)
propertiesObject是可选参数,作用就是给新对象添加新属性以及描述器(图2),具体可参考 Object.defineProperties() - mdn 的第二个参数。需要注意的是新添加的属性是新对象自身具有的属性也就是通过hasOwnProperty() 方法可以获取到的属性,而不是添加在原型对象里。(图3)
具体三个步骤就是:
- 创建一个对象
- 继承指定父对象
- 为新对象扩展新属性
自己实现一个Object.create() :
Object.myCreate = function (obj, properties) {
var F = function () {}
F.prototype = obj
if (properties) {
Object.defineProperties(F, properties)
}
return new F()
}
Object.myCreate({}, {a: {value: 1}}) // {a: 1}
new Object()
New
https://www.cnblogs.com/psxiao/p/11545217.html
new obj()不仅能继承prototype,也能继承构造函数内属性