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.jQuerywindow.$设置为本地jQuery对象。 我们可以通过使它们成为window对象的属性来设置全局变量。

现在window.jQuerywindow.$都指向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源代码中看到这个概念。