JavaScriptでは、関数がどのように呼び出されるかthis
によって完全に定義されます。jQueryの関数は、各要素値に設定する方法で指定したイテレーター関数を呼び出すため、そのイテレーター関数内では、そのコードの残りの部分で参照されているものを参照しなくなります。each
this
this
これは、クロージャのコンテキストで変数を使用して簡単に修正できます。
clusters.prototype.shop_iqns_selected_class = function() {
var self = this; // <=== The variable
if(this.viewport_width < 980) {
$(this.iqns_class).each(function() {
// Do this *once*, you don't want to call $() repeatedly
var $elm = $(this);
// v---- using `self` to refer to the instance
$(self.iqn).on('click', function() {
// v---- using $elm
if($elm.hasClass('selected')) {
$elm.removeClass('selected');
} else {
$elm.addClass('selected');
}
});
});
}
}
そこで、各DOM要素を参照するために引き続き使用しましthis
たが、イテレーター関数への引数を受け入れることができるため、あいまいさはありません。
clusters.prototype.shop_iqns_selected_class = function() {
var self = this; // <=== The variable
if(this.viewport_width < 980) {
// Accepting the args -----------v -----v
$(this.iqns_class).each(function(index, elm) {
// Do this *once*, you don't want to call $() repeatedly
var $elm = $(elm);
// v---- using `self` to refer to the instance
$(self.iqn).on('click', function() {
// v---- using $elm
if($elm.hasClass('selected')) {
$elm.removeClass('selected');
} else {
$elm.addClass('selected');
}
});
});
}
}
もっと読む( JavaScriptでの私のブログへの投稿this
) :