我正在努力学习Javascript的真实细节,所以如果有人能为我解释这段代码,我将不胜感激。在ColorBox中,作者将其公共方法定义为:
publicMethod = $.fn[colorbox] = $[colorbox] = function (options, callback) {
// do stuff...
};
然后定义其他公共方法,例如:
publicMethod.remove = function () {
// do more stuff
};
在实践中,我知道这些函数可以被称为 $ .colorbox()和 $ .colorbox.remove(),但我有点困惑的实际语法。具体来说,当他将“$。fn [colorbox]”和“$ [colorbox]”分配给publicMethod时会发生什么?
您对此代码有任何评论吗?这是一个很好的设计模式吗?你会推荐其他模式吗?
答案 0 :(得分:3)
在JavaScript中,每个对象同时是一个关联数组,对象属性也是数组键。这意味着obj.prop = 1
和obj["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的简写,当脚本通过缩小器时会缩短。