Object.create用法
阿新 • • 發佈:2017-12-22
var reat cal ons etc his 傳遞 並且 create
用法: Object.create(object, [,propertiesObject])
創建一個新對象,繼承object的屬性,可添加propertiesObject添加屬性,並對屬性作出詳細解釋(此詳細解釋類似於defineProperty第二個參數的結構)
var banana= { color: ‘yellow‘, getColor: function(){ return this.color } }
//創建對象sub_banana var sub_banana= Object.create(banana) console.log(sub_banana.color) //yellow console.log(sub_banana.getColor()) //yellow
添加propertiesObject
"use strict" var banana= { color: ‘yellow‘, getColor: function(){ return this.color } } var sub_banana= Object.create(banana, {
//添加taste屬性 taste: {
//詳細解釋 writeable: false, get: function(){ console.log(‘getTaste‘)return ‘good‘ } },
//添加weight
weight: {
value: 600
} }) console.log(sub_banana.color) console.log(sub_banana.getColor()) console.log(sub_banana.taste) //good
console.log(sub_banana.weight) //600 sub_banana.taste= ‘bad‘ //報錯,writeable為false不可改變
此方法也常用於創建對象實例
function theSuper(_a){ this.a= 100 } theSuper.prototype.getA= function(){ return this.a } //繼承prototype var sub1= Object.create(theSuper.prototype)
//繼承prototype而不是構造函數內的值 console.log(sub1.a) //undefined sub1.a= 100 console.log(sub1.getA()) //100
那麽,此方法與new obj()的區別在哪?
Object.create的實現核心代碼:
Object.create = function (o) { var F = function () {}; F.prototype = o; return new F(); };
可見: 創建函數,將傳遞的對象賦給函數的prototype,再返回函數實例。
new obj()的核心實現代碼:
var o1 = new Object(); o1.[[Prototype]] = Base.prototype; Base.call(o1);
創建對象,將被繼承對象的prototype賦給此對象,並且調用被繼承對象的方法來為其初始化。(因此new obj()不僅能繼承prototype,也能繼承構造函數內屬性)
Object.create用法