JavaScript物件導向-- 什麼是Object.create([prototype])?
最近終於忙完我哥的婚禮,
可以好好回來讀書了: )
之前曾經說過, 建立新物件有3種方法, 而第3種是用於建立多個物件。現在我們以第3種進行延伸討論:
當我們做new這動作時, 就像在跟記憶體要求一個新空間來存放新建立的物件,
也就等於去操作:
Object.create([prototype])+[Class].call(obj)
Object.create([prototype])+[Class].call(obj) & 第3種方法(e.g. var c = new CCC();)
--> 能建立新物件, 且會連帶將原型也幫忙設定好。
第1種(var a = {};)和第2種方法(var b = new Object();)
--> 能建立新物件, 且不會將原型幫忙設定好。
e.g.
function CCC() {
CCC.prototype.showname = function() {
console.log("CCC");
};
}
var a = new Object();
var b = {};
var c = Object.create(CCC.prototype);
當我們:
dir(a): Object
--> __proto__: Object
--> constructor: function Object()
當 a.__proto__ === Object.prototype // true
a.__proto__.constructor === Object // true
a.__proto__ === CCC.prototype // false
dir(b): Object
--> __proto__: Object
--> constructor: function Object()
當 b.__proto__ === Object.prototype // true
b.__proto__ === CCC.prototype // false
dir(c): CCC
--> __proto__: Object
--> constructor: function CCC()
當 c.__proto__ === Object.prototype // false
c.__proto__ === CCC.prototype // true
最後, 實際舉例Object.create([prototype])+[Class].call(obj)怎麼使用吧:
e.g.
function CCC(age) {
this.age = age;
}
var a = new CCC(30);
console.log(a.age); // 30
var b = Object.create(CCC.prototype);
CCC.call(b, 25);
console.log(b.age); // 25
留言
張貼留言