2015-12-17 43 views
0

在JavaScript代碼中,我們目前使用Method1創建了很多對象(請參閱代碼)。使用Method2會更好嗎? (使用.prototype)這些好處是什麼? (Espescially感興趣的執行速度和內存使用情況。)我們應該使用.prototype而不是當前實例化方法嗎?

var exampleObjectFunction1 = function(){ alert(this.exampleProperty1);}; 
    var exampleObjectFunction2 = function(){ this.myFunction1(); }; 
    var exeampleProperties = { 
     exampleProperty1: 'example', 
     exampleProperty2: 'example', 
    }; 

    //Method1: Current instanciation method 
    function exampleObject1(properties) { 
     this.exampleProperty1 = properties.property1; 
     this.examplePropertyX = properties.propertyX; 
     this.exampleObjectFunction1 = exampleObjectFunction1; 
     this.exampleObjectFunction2 = exampleObjectFunction2; 
    }; 
    var exampleObject1 = new exampleObject(properties); 

    //Method2: Using prototype (better?) 
    function exampleObject2(properties) { 
     this.exampleProperty1 = properties.property1; 
     this.examplePropertyX = properties.propertyX; 
    }; 
    exampleObject2.prototype.exampleObjectFunction1 = exampleObjectFunction1; 
    exampleObject2.prototype.exampleObjectFunction2 = exampleObjectFunction2; 

    var exampleObject2 = new exampleObject2(properties); 

編輯:我看到了很多的「構造VS原型」的比較。但是,那裏的「構造函數」代碼通常在構造函數中重新定義函數,而我將它們預先定義在可重用變量中。我認爲這是一個不同的方案,但我不太確定它是否更接近「原型」或「構造函數」。

+1

你不會有多個相同功能的冗餘實現,但多個冗餘引用相同的功能。代碼也更加複雜,因爲您可以通過兩個步驟來定義和分配函數,而不是僅在exampleObject1.prototype'上執行一次,例如'exampleObject2'可以繼承。 – deceze

回答

2

假設您創建了exampleObject1的1000個對象和exampleObject2的1000個對象。

如果您想要覆蓋所有exampleObject1對象的exampleFunction1,則必須遍歷所有對象並對其進行更改。

如果您想要爲所有exampleObject對象執行此操作,只需在一個位置更改它的原型。

因此,從代碼的角度來看,可擴展性是使用原型更好的選擇。

+0

內存使用情況如何?我提到過,如果你在之前的版本中回答了它,但刪除了它?儘管它似乎與原始帖子中的「欺騙」評論相符。 – TTT

+1

是的,我刪除它,因爲我注意到你沒有在構造函數中創建函數。你只有很多引用與@deceze提到的相同的功能。在這種情況下,從內存使用的角度來看,原型的使用應該稍微好一些。但我從來沒有看到任何基準:) – madox2

相關問題