我在创建对象的新实例时遇到问题。
使用下面的代码,我期望每个元素都有自己的随机值(正在发生)。
但是后来我也期望该this.element
值包含在对象的每个实例中,但是每次在对象的任何实例中更改值时,它都会在所有实例中更新。
var Instance = function(element) {
this.$element = $(element);
this.subInstance.parent = this;
}
Instance.prototype = {
subInstance: {
parent: null,
$element: null,
init: function() {
var $this = this;
this.$element = this.parent.$element;
//test for what this.$element refers to in init function
var random = Math.random();
$('.element', this.$element).text('Updated ' + random);
//test for what this.$element refers to in an event handler
$('.element', this.$element).on('click', function(e) {
$this.$element.css('background-color', '#f00');
});
}
}
}
$('div.instance').each(function(i, o) {
var instance = new Instance(o);
instance.subInstance.init();
});
现在我知道我可以将 subInstance 移出原型并使用构造函数,this.subInstance = {...
但这似乎是错误的,为什么this.$element
不包含在对象的每个实例中?
两个示例的 JSFiddle:http: //jsfiddle.net/q7zAg/