我在过去的一天里做了很多阅读,以便更深入地了解这与$(这个)以及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) {
...
}
任何人可能拥有的见解都将是一个很大的帮助。
答案 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元素。