この問題を既存のコードで見つけ、提案された解決策を作成しましたが、あなたの意図が正確に明確ではないため、ニーズとは少し異なる可能性があります。必要に応じて変更してください。
問題
主な問題はオブジェクトに起因しFilledObjectArray
ます。このオブジェクトのプロトタイプには関数が割り当てられ、fill
次に値が1のint型のプロパティone
が割り当てられます。したがって、このオブジェクトには2つのプロパティがあり、1つは関数、もう1つはintであることに注意してください。
したがって、このコードを実行すると...
for (key in this.something) {
$("#some-div").append(this.something[key]); //Item 1
}
ループの2つの反復が発生します。1つは関数に対して、もう1つfill
はプロパティに対してone
です。fill
この問題は、キーの反復で発生します。これは、関数を受け入れることができないthis.something[key]
に渡されるためappend()
、jQueryが関数をトリガーする原因になります。fill
これが発生すると、関数の実行コンテキスト内で、プロパティを持たないにthis
が割り当てられ、TypeErrorがスローされます。私はこれについて以下にコメントしました:#some-div
filledObject
var FilledObjectArray = function() {
this.filledObject = {}; //Fill is an object
};
FilledObjectArray.prototype = {
fill: function() {
this.filledObject["one"] = 1;
}
};
var SomeClass = function() {
this.something = new FilledObjectArray();
};
SomeClass.prototype = {
showContents: function() {
this.something.fill();
for (key in this.something) {
$("#some-div").append(this.something[key]); //The fill function is called here
}
}
};
$(document).ready(function() {
var s = new SomeClass();
$(".bla").each(function() {
$(this).click(function() {
s.showContents();
});
});
});
提案された解決策
var FilledObjectArray = function() {
this.filledObject = [];
};
FilledObjectArray.prototype.fill = function(){
console.log(this);
this.filledObject[0] = 1;
};
var SomeClass = function() {
this.something = new FilledObjectArray();
};
SomeClass.prototype = {
showContents: function() {
this.something.fill();
for (var x = 0; x < this.something.filledObject.length; x++){
$("#some-div").append(this.something.filledObject[x]);
}
}
};
$(document).ready(function() {
var s = new SomeClass();
$(".bla").each(function() {
$(this).click(function() {
s.showContents();
});
});
});