オブジェクトの新しいインスタンスの作成に問題があります。
以下のコードを使用して、各要素が独自のランダムな値を持つことを期待していました(これは起こっています)。
しかし、オブジェクトの各インスタンスに値が含まれることも期待していました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/