在.each()调用中使用此而不是$(this)

时间:2014-08-17 21:11:04

标签: javascript jquery

我在过去的一天里做了很多阅读,以便更深入地了解这与$(这个)以及JS如何解释这一点,但我仍然无法弄清楚插件的一个细节我正在分析以加深我的知识:

$.fn.plugInName = function(options) {
  return this.each(function() {
    new $.plugInName(this,options);
  });
};

我读过的所有内容都表明尽管this.each()用于调用JQuery.prototype.each(),但每个对象在each()函数中应该被称为$(this),但是上面的用法常规的'这个,我无法理解为什么。 $ .plugInName声明如下所示:

$.plugInName = function(el,options) {
  ...
}

任何人可能拥有的见解都将是一个很大的帮助。

编辑:Here's the full source on GitHub

1 个答案:

答案 0 :(得分:2)

来自MDN

  

当一个函数作为一个对象的方法被调用时,它被设置为   调用该方法的对象。

当您拨打

之类的内容时
$('#myDiv').plugInName()

该函数被称为jQuery对象$('#myDiv')的方法。因此,在这种情况下,this已经引用了一个jQuery对象,因此我们不需要额外的$()包装器。

我们确实需要$()的常见情况是绑定事件时。

$('#myDiv').on('click', function(){
    alert('You clicked my div!');
});

这里的不同之处在于函数不是在$('#myDiv')上调用,而是在它所属的DOM元素上调用。所以,这里this是一个DOM对象,而不是一个jQuery对象。


在传递给each的回调函数中,this引用了DOM元素,它不是jQuery对象..这正是$.plugInName想要的。它需要一个DOM元素。