jQuery如何实现$ jQuery函数的别名?
我在绕着$ sign作为jQuery函数的别名时遇到了一些麻烦,特别是在插件中。 你能解释一下jQuery如何实现这种别名:它如何定义’$’作为jQuery函数的别名? 这是第一个问题。
其次,你能解释下面的代码如何/为什么在插件的定义中将’$’映射到jQuery函数,为什么如果你不这样做,你的插件可能会与其他可能使用美元符号的库发生冲突?
(function( $ ){ $.fn.myPlugin = function() { // Do your awesome plugin stuff here }; })(jQuery);
与javascript中的任何对象一样,函数可以分配给变量。 此变量可以具有任何名称(遵循JS变量命名规则)。 “$”满足命名规则,因此为简洁起见,jQuery函数别名为“$”。 请考虑以下示例:
var myFn = function() { alert('myFunc'); }; var $ = myFn; $(); // alerts 'myFunc'
它只是声明一个变量。 看到这里
jQuery本身是一个很大的自执行function。 这意味着它声明了一个函数然后运行它。 在函数内部,它声明了一个函数的本地jQuery
对象。
然后它会在它结束时设置window.jQuery = window.$ = jQuery
这是将window.jQuery
和window.$
设置为本地jQuery
对象。 我们可以通过使它们成为window
对象的属性来设置全局变量。
现在window.jQuery
和window.$
都指向jQuery
因为对象是通过引用传递的。
var jQuery = (function() { var jQuery = function( selector, context ) { ... }; ... return (window.jQuery = window.$ = jQuery); }());
因为在寻找变量时它不需要向上看到额外的外部函数,所以它会小规模地宣告jQuery两次以获得小的效率增益。
您可以使用两个分配,因为(var a = b) === b
正如其他人提到的那样, $
是一个有力的变量名称,而且函数是第一类对象,因此我们可以将它们视为对象也有助于实现这一目标。
确切的代码(来自jquery-1.4.1-vsdoc.js):
// Expose jQuery to the global object window.jQuery = window.$ = jQuery;
JavaScript中的对象,也就是jQuery,是函数。 您可以通过创建一个函数来定义您自己的JS库,该函数具有分配给该单个函数的属性的其他函数:
myLibrary = function() { this.myLibraryFunction = function() { ... }; }; new myLibrary().myLibraryFunction();
以类似的方式,jQuery使用名为jQuery
的函数执行此操作,而不是上面示例中的myLibrary
。
创建别名
可以创建别名(或引用),因为JavaScript允许传递对函数的引用而无需实际调用该函数。 例如:
new myLibrary().myLibraryFunction();
调用库函数,但省略括号允许您处理对该函数的引用:
var f = new myLibrary().myLibraryFunction;
然后,您可以通过放回括号来调用已存储的引用,而不是原始引用:
var f = new myLibrary().myLibraryFunction; f();
以同样的方式,jQuery可以在另一个名为$
变量中存储对jQuery
函数的引用:
var $ = jQuery;
您可以在github上的jQuery源代码中看到这个概念。