jQuery插件创作:“this”关键字的解释?
问题描述:
我已经使用jQuery编码了大约2年,但我从来没有在插件中完成它。我试图改变这一点。我找到了几个解释如何创建插件的网站,并了解基础知识。jQuery插件创作:“this”关键字的解释?
我不明白的部分是使用this
关键字。这里有一个简单的插件,例如:
(function($){
$.fn.myPlugin = function(options)
{
// Do whatever
return this.each(function(){
element = $(this);
});
}
$.fn.myPlugin.init = function()
{
// Initiate plugin
}
})(jQuery);
在我的代码的第5行,我有this.each
。在这种情况下,this
关键字引用选择器中的所有元素。下面的行使用$(this)
这是当前元素,就像我在.click(function(){$(this).hide();})
中做的那样。
现在,在OO逻辑中,通常我们有一个this
关键字来引用内部函数或属性。如果在$.fn.myPlugin
我想打电话给$.fn.myPlugin.init()
,我希望能够处理类似this.init()
的事情,但它似乎没有工作。
此外,我期待能够以类似的方式定义类属性,如this.myVariable = "my value"
。
所以,如果任何人都可以解释我想要了解jQuery的插件概念,或者指出我在正确的方向与相关的链接,我会很感激的帮助!如果我的解释不够清楚,让我知道,我会尽力让它变得更好,但现在我的想法有些模糊。 ;)
答
在进入.each()
之前,this
实际上是包含匹配DOM元素集的jQuery对象。
如果您想以这种方式调用该函数,您需要在它添加的范围内调用它。 $.fn.myPlugin
。
this.myPlugin.init();
或内部的每个这样的:
$(this).myPlugin.init();
或者直接像这样:
$.fn.myPlugin.init();
this.myPlugin.init()和$ .fn.myPlugin.init()都给我一个未定义的错误... – Gabriel 2010-08-27 18:04:01
@加布里埃尔 - 取决于你在哪里,当你打电话给他们。试试这个例子:http://jsfiddle.net/bRfdE/你会得到3种不同的调用方式。所以问题将出现在何时何地,你会怎么做?如果您期望'this'引用DOM元素或jQuery对象,则需要做一些小改动。 – user113716 2010-08-27 18:16:20
你是绝对正确的,对不起,我的电话是在bind()中的一个匿名函数。这给我带来了另一个问题,但我会想出一些我猜...似乎所有对我的项目的引用丢失,当我在那里... – Gabriel 2010-08-27 18:52:59