2012-01-19 94 views
1

在註釋中輸出。這是JavaScript的bug,骨幹或其他?骨幹或javascript對象擴展bug

var t = Backbone.View.extend({ 
    ben: {}, 
    banana: function(s){ 
     this.ben[s] = s; 
    }, 
    show: function(){ 
     console.info(this.ben) 
    } 
}); 
var c1 = new t(); 
var c2 = new t(); 
c1.banana('1'); 
c1.show(); //Object { 1="1"} 
c2.banana('2'); 
c1.show(); //Object { 1="1", 2="2"} 

回答

3

代碼的行爲如預期的那樣(即不是bug)。 ben被添加到prototype

考慮這樣做,而不是:

var t = Backbone.View.extend({ 
    initialize: function (options) { 
     this.ben = {}; 
    } 
    banana: function(s){ 
     this.ben[s] = s; 
    }, 
    show: function(){ 
     console.info(this.ben) 
    } 
}); 
1

這是不是一個錯誤,ben是一個「類屬性」(不是真的,因爲有在JavaScript中沒有類,但它就像一個)。

每次你做new t()你引用相同的ben