2012-01-19 99 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