Object.create()

admin發表於2018-09-23

此方法可以建立一個物件例項,併為其指定原型物件和屬性。

為物件例項新增屬性,這一點沒有任何異議,給物件例項指定原型物件要特別注意一下,也就是設定物件的__proto__屬性值,千萬不要誤認為是建構函式的prototype原型物件。

關於__proto__參閱prototype 和 __proto__一章節。

更多Object物件內容參閱JavaScript Object 物件一章節。

ES5新增此方法。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
Object.create(prototype, descriptors)

引數解析:

(1).prototype:必需,被建立物件的原型物件。

(2).descriptors:可選,包含一個或多個屬性描述符的 JavaScript 物件,用來規定要被新增到物件的屬性,可以分為兩類,資料屬性和訪問器屬性,關於這兩類屬性的更多內容可以參閱相關連結。

相關文章:

(1).訪問器屬性可以參閱JavaScript get與set訪問器一章節。

(2).資料屬性可以參閱configurable、enumerable和writable一章節。

瀏覽器相容:

(1).IE9+瀏覽器支援此方法。

(2).edge瀏覽器支援此方法。

(3).谷歌瀏覽器支援此方法。

(4).火狐瀏覽器支援此方法。

(5).opera瀏覽器支援此方法。

(6).safria瀏覽器支援此方法。

程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let obj=Object.create(null,{
  webName:{
    value:"螞蟻部落",
    enumerable:true
  },
  url:{
    value:"softwhy.com",
    enumerable: true
  }
});
console.log(obj.webName);
console.log(obj.__proto__);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/23/101010qs0p4irm77i5iz0u.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

程式碼分析如下:

(1).利用Object.create方法建立一個物件,此物件的原型物件為null,也就是沒有原型物件。

(2).為此物件新增兩個屬性,webName和url。

__proto__屬性指向物件例項的原型物件,具體參閱prototype 和 __proto__一章節。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let proto = {
  url:"www.softwhy.com"
}
let obj=Object.create(proto,{
  webName:{
    value:"螞蟻部落",
    enumerable:true
  },
  url:{
    value:"softwhy.com",
    enumerable: true
  }
});
console.log(obj.webName);
console.log(obj.__proto__);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/23/101054o2lcmm96693wesl6.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上述程式碼利用Object.create方法建立一個物件,物件的原型是proto物件。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let proto = {
  url:"www.softwhy.com"
}
let obj=Object.create(proto,{
  webName:{
    value:"螞蟻部落",
    enumerable:true
  },
  age:{
    get () {return "螞蟻部落"+this._Age+"歲了";},
    set (value) {this._Age = value;}
  }
});
obj.age=4;
console.log(obj.age);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/23/101126cmtixstlln1ksimy.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上面程式碼演示了為新物件新增了一個訪問器屬性age。