2010-02-09 95 views

回答

12

你是對的,但現在在ECMAScript的第5版,該Object.create方法能夠創建使用其他對象作爲原型對象的實例:

var proto = {foo: 1}; 
var obj = Object.create(proto); 

在上面的例子中,obj將被創建,它將包含[[Prototype]]內部屬性爲proto參考,並:

obj.foo; // 1 
obj.hasOwnProperty('foo'); // false 

這種方法是從批准的2009年12月新的規範,據我現在已經看到的是AVA適用於Mozilla JavaScript 1.9.3實施。

現在你可以通過這種模仿法的行爲,提出Douglas Crockford

if (typeof Object.create !== 'function') { 
    Object.create = function (o) { 
    function F() {} 
    F.prototype = o; 
    return new F(); 
    }; 
} 
+1

康福德曾提出的「生出」一個稍微更高效的版本(順便說一句,最初由拉塞·尼爾森所提到的,不Crockford),其中「dummy」函數(在你的例子中爲'F')被存儲在閉包中,然後被重用。這使得更多的內存(和運行時)有效的實現。另請注意,Crockford的Object.create仿真幾乎不符合ES5(不支持第二個參數,沒有第一個參數的類型檢查來拋出TypeError,如果它不是對象等)。謹慎使用;) – kangax

+0

你是一個拯救生命的人。我一整天都在爲網絡搜索這個想法。 –

相關問題