2016-03-15 36 views
1

我有低於這個腳本,該腳本觸發按鈕點擊:的JavaScript推到數組類原型問題

<button>Click</button> 

<script> 
    var test = function(){}; 
    test.prototype = { 
    item:[] 
    }; 

    $(document).ready(function(){ 
    $("button").on('click',function(){ 
     var t = new test(); 
     t.item.push(1); 
     console.log(t.item);//[1],[1,1],[1,1,1] 
    }); 
    }) 
    </script> 

那爲什麼t.item的值總是循環,而不是產生一個新的有沒有價值, ?

+0

我認爲你想要項目作爲一個屬性,並'推'在你的方法(原型)。所以'var test = function(){this.item = [];}'和'test.prototype.doSomething = function(i){this.item.push(i); return this.item;}' – oortCloud

+0

在這種情況下,你需要在構造函數中初始化屬性('function Test(){this.item = [];}')。請參閱http://stackoverflow.com/a/16751343/560114以及http://www.bennadel.com/blog/1566-using-super-constructors-is-critical-in-prototypal-inheritance-in-javascript。 HTM。 –

+0

就我個人而言,爲了避免這個問題,我在構造函數而不是原型中聲明瞭所有*數據屬性。儘管從技術上講,只需要爲非原始類型(即對象和數組)執行此操作。 –

回答

1

因爲t.item正在考慮test.prototype.item。

所以新的對象將繼承項目數組。

您可以通過執行

var test = function(){this.item=[];}; 

將創建對象本身上一個新的陣列,而不是使用對原型的所有實例相同的陣列避免。