2011-06-08 110 views
3

我努力学习JavaScript的真正细节坚韧细节此彩盒代码,所以我将不胜感激,如果有人可以给我解释一下这段代码。在颜色框,笔者定义了他的公开方法,像这样:详细讲解

publicMethod = $.fn[colorbox] = $[colorbox] = function (options, callback) { 
    // do stuff... 
}; 

其他公共方法再定义,如:

publicMethod.remove = function() { 
    // do more stuff 
}; 

在实践中,我知道,这些功能可以再被称为$ .colorbox()$ .colorbox.remove(),但我通过实际的语法有点困惑。具体而言,当他分配发生了什么事 “$ .fn [颜色框]”“$ [颜色框]”到publicMethod?

你对这个代码的注释?这是一个很好的设计模式吗?你会推荐其他模式吗?

+0

第一块代码是不是将匿名函数多次赋值给publicMethod,$ .fn [colorbox]和$ [colorbox]? – 2011-06-08 07:36:24

+0

是的,对不起,你是对的。但是,将该匿名函数分配给$ .fn [colorbox]和$ [colorbox]时会发生什么。我想我不明白括号符号。 – 2011-06-08 07:40:09

回答

3

在JavaScript中的每个对象是在同一时间的关联数组,对象属性也数组键。这意味着,obj.prop = 1obj["prop"] = 1是完全一样的东西。而且,方法只是具有函数作为其值的属性。因此$["colorbox"] = function() {...}创建一个匿名函数并将其指定为对象的属性colorbox$$是JavaScript中的常规变量名称),则此函数将变为方法$.colorbox()。请注意,我使用了字符串"colorbox",你的代码示例有它不但是引号 - 这将解释为一个变量名,所以变量colorbox与价值"colorbox"可能是那里使用。

函数是对象,以及这样你就可以对它们设置自定义属性。在这个例子中,属性remove被设置在函数对象上,并成为它的方法。

+0

是的,我可以在上面看到,他宣布 颜色框=“颜色框” – 2011-06-08 08:16:10

+0

'OBJ。prop = 1'和'obj [“prop”] = 1'完全一样。完美的解释 – Lopsided 2015-01-06 21:44:58

1

彩盒笔者在这里,我想说的话弗拉基米尔是完全正确的。我使用括号表示法,以便在通过缩小器时可以缩短变量(colorbox),因为在源中重复使用了相同的字符串。

在JavaScript中,对象(在这种情况下,函数表达式)围绕通过引用传递。

所以$ .colorbox,$ .fn.colorbox和publicMethod都指向同一个对象。当一个新的属性被添加到publicMethod(例如publicMethod.remove = function(){};)时,$ .fn.colorbox也会接收该属性,因为它们都引用同一个对象。

$ .fn.pluginName是jQuery插件的约定,$ .colorbox只是一个别名。 publicMethod是插件中使用的$ .fn.colorbox的缩写,当脚本通过缩减器时会缩短。