1. 程式人生 > 其它 >js--New 和 Object.create()的區別

js--New 和 Object.create()的區別

技術標籤:jsjs

Object.create()

object.create(proto, propertiesObject)

object.create() 是使用指定的原型proto物件及其屬性propertiesObject去建立一個新的物件。(mdn)

proto 是必填引數,就是新創建出來的物件的原型 (新物件的 __proto__屬性指向的物件),值得注意的是當proto為null的時候建立的新物件完全是一個空物件,沒有原型(圖一),也就是沒有繼承Object.prototype上的方法。(如hasOwnProperty() toString() 等)
圖1

propertiesObject是可選引數,作用就是給新物件新增新屬性以及描述器(圖2),具體可參考 Object.defineProperties() - mdn 的第二個引數。需要注意的是新新增的屬性是新物件自身具有的屬性也就是通過hasOwnProperty() 方法可以獲取到的屬性,而不是新增在原型物件裡。(圖3)

(圖2)

具體三個步驟就是:

  1. 建立一個物件
  2. 繼承指定父物件
  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,也能繼承建構函式內屬性