js--New 和 Object.create()的區別
阿新 • • 發佈:2020-12-22
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,也能繼承建構函式內屬性