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

留言

熱門文章