はい、コールバック内でthis
は、インスタンスのコンテキストではなく要素を参照します。だからキャッシングしてみてくださいthis
。
var Tset = function () {
var self = this; //<-- cache this to be used later
this.a = $('div').text("lorem ipsum ..").appendTo('#a1');
$(this.a).mouseover(function () {
self.setBackground('red'); //invoke it with self
});
this.setBackground = function (_color) {
$(this.a).css({
'background-color': _color
});
}
}
var x = new Tset();
Ecmascript5 function.bind、$.proxyなどを使用する、これに似た他の手法が利用可能です。
バインドされた関数の使用:
var Tset = function () {
this.a = $('div').text("lorem ipsum ..").appendTo('#a1');
$(this.a).mouseover((function () {
this.setBackground('red'); //Now this will be your instanc's context
}).bind(this)); //bind the context explicitly
this.setBackground = function (_color) {
$(this.a).css({
'background-color': _color
});
}
}
バインドされた関数を除いて、呼び出し元はコールバック内のコンテキストを決定します
フィドル