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(); 
+0

this.myPlugin.init()和$ .fn.myPlugin.init()都给我一个未定义的错误... – Gabriel 2010-08-27 18:04:01

+0

@加布里埃尔 - 取决于你在哪里,当你打电话给他们。试试这个例子:http://jsfiddle.net/bRfdE/你会得到3种不同的调用方式。所以问题将出现在何时何地,你会怎么做?如果您期望'this'引用DOM元素或jQuery对象,则需要做一些小改动。 – user113716 2010-08-27 18:16:20

+0

你是绝对正确的,对不起,我的电话是在bind()中的一个匿名函数。这给我带来了另一个问题,但我会想出一些我猜...似乎所有对我的项目的引用丢失,当我在那里... – Gabriel 2010-08-27 18:52:59