2013-04-26 66 views
1

您好,如果有檢索頂層(或從頂部的任何數量的級別)的原型在JavaScript原型鏈的一個「聰明」的方式我想知道。獲取頂級原型在JavaScript原型鏈

的問題是,給定:

var a = Object.create(Object.prototype, {'class' : {value : 'a'}}); 
    var b = Object.create(a, {'class' : {value : 'b'}}); 
    var c = Object.create(b, {'class' : {value : 'c'}}); 

我能得到一個從C無需編寫一個循環?

var topClass = c; 
    while (Object.getPrototypeOf(topClass) !== Object.prototype) { 
    topClass = Object.getPrototypeOf(topClass); 
    } 
    console.log('expect this to be true: '+ a === topClass); 

回答

2

我能得到一個從C無需編寫一個循環?

不,你必須做你所做的一切,走到底部(或者到頂部,無論你喜歡哪個術語)。

也許值得指出的是,如果你打算在瀏覽器上下文中這樣做,如果你引用的代碼與另一個窗口中創建的對象一起工作,你的循環將無法可靠地工作,因爲一個窗口的Object.prototype不是===另一個窗口的Object.prototype。但這只是重要的A)如果你在瀏覽器中這樣做,並且B)如果你可能正在從另一個窗口的對象上做它。 (如果對你很重要,你可以循環,直到你回到null,然後假設之前的兩個級別是鏈中的第一個非Object原型...)

+0

@ tj-crowder感謝窗口技巧,我不知道那個! – Renaud 2013-04-30 12:23:29