详细解释这个ColorBox代码

时间:2011-06-08 07:31:37

标签: javascript jquery jquery-plugins

我正在努力学习Javascript的真实细节,所以如果有人能为我解释这段代码,我将不胜感激。在ColorBox中,作者将其公共方法定义为:

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

然后定义其他公共方法,例如:

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

在实践中,我知道这些函数可以被称为 $ .colorbox() $ .colorbox.remove(),但我有点困惑的实际语法。具体来说,当他将“$。fn [colorbox]”“$ [colorbox]”分配给publicMethod时会发生什么?

您对此代码有任何评论吗?这是一个很好的设计模式吗?你会推荐其他模式吗?

3 个答案:

答案 0 :(得分:3)

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

函数也是对象,因此您可以在它们上设置自定义属性。在示例中,属性"colorbox"正在函数对象上设置并成为其方法。

答案 1 :(得分:1)

根据Mozilla javascript指南,在这种情况下,方括号用作属性访问器。见https://developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects

答案 2 :(得分:1)

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

在JavaScript中,对象(在本例中为函数表达式)通过引用传递。

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

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