2011-11-22 83 views
2

幾天前,我在這裏發佈關於class inheritance對象的原型鏈的深度是否影響性能?

這時,有人提供了一個鏈接 - a clever script問題由約翰Resig的類繼承。

然後我嘗試使用這個腳本。

但我發現這個腳本創建的對象將有一個非常深的原型鏈。

我使用的例子在博客:

var Person = Class.extend({ 
    init: function(isDancing){ 
    this.dancing = isDancing; 
    }, 
    dance: function(){ 
    return this.dancing; 
    } 
}); 

var Ninja = Person.extend({ 
    init: function(){ 
    this._super(false); 
    }, 
    dance: function(){ 
    // Call the inherited version of dance() 
    return this._super(); 
    }, 
    swingSword: function(){ 
    return true; 
    } 
}); 

var n=new Ninja(true); 
console.dir(n); 

Firebug的,我發現這一點: enter image description here

所以我想不會原型鏈中的對象的深度影響性能?

它似乎有一個無盡的循環。

回答

3

構造函數的原型是相同的構造函數。所以是的,你正在尋找一個無限循環。

但是,瀏覽器在解析對象的成員時不遵循構造函數鏈,它有一個實際使用的內部指針(有時稱爲__PROTO__,但不指望它)。一個JavaScript引擎也可能選擇編譯機器代碼,以便提前解析可能的成員,因此在實際執行期間根本不存在任何鏈接。

我強烈懷疑你會遇到任何放緩。

0

它會影響性能,因爲它需要遵循原型鏈來獲取屬性的值。

這可能會成爲您的應用程序的瓶頸嗎?我非常懷疑它。

+0

當然不是。我只是想確定這一點。 – hguser

+3

@hguser出於某種原因,我不得不澄清,羅素關於潛在瓶頸的問題純粹是一種修辭。 –

相關問題