在 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');
}
});
});
}
}
我继续使用它this
来引用每个 DOM 元素,但您可以接受迭代器函数的参数,这样就不会有歧义:
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');
}
});
});
}
}
更多阅读(我的博客this
中关于 JavaScript 的帖子):