如何自定义构建基于 Jquery 的 javascript API 以及关于 Jquery 中使用的语法的一些问题
Posted
技术标签:
【中文标题】如何自定义构建基于 Jquery 的 javascript API 以及关于 Jquery 中使用的语法的一些问题【英文标题】:how to Custom build a javascript API based on Jquery and some questions about the syntax used in Jquery 【发布时间】:2011-03-29 12:39:57 【问题描述】:我带着很多问题来到这里,所以让我们开始吧:
我想了解一些有关用于制作 jquery 的语法的知识,因为我希望从中学习并为自己使用它。
问题 1: jQuery库的开始
(function( window, undefined )
// Define a local copy of jQuery
var jQuery = function( selector, context )
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context );
,
// Map over jQuery in case of overwrite
_jQuery = window.jQuery, .......
我想知道函数前的括号是什么意思,比如“(function(window...”),直到现在我只声明了这样的函数
function myFunc(myArg1,myArg2)
//stuff
问题 2:
在 jquery 库的末尾,我似乎明白 $ 符号是在全局范围内分配的,因此我们可以在任何地方使用 $ 作为选择器,我不明白的是“(窗口); "最后的表达是什么意思,它的作用是什么。
;
);
// Expose jQuery to the global object
window.jQuery = window.$ = jQuery;
)(window);
我的最后一个问题是,我怎样才能创建一个我自己的全局可访问的 javascript 对象,我可以使用它,比如“ds.functionName(Arg1);”就像 JQuery 与 $ 符号一起使用
谢谢你:D
【问题讨论】:
【参考方案1】:问题 1 和问题 2 实际上是相关的。他们正在做的是使用(function(params)...)
位定义一个函数,并使用(window)
位立即执行它,并将window 作为参数传入。它看起来很奇怪,但它是确保您最终不会污染全局名称空间的一种巧妙方法。如果您将函数定义为function foo()...
,则意味着foo
是全局命名空间(窗口)中的一个函数,任何人都可以调用您的函数。更糟糕的是,这意味着没有其他人可以在全局中定义 function foo
而不会践踏你的函数 foo。发生这种情况时会发生坏事 :-) 188663 有更多关于这种模式的信息。
第三个问题,jQuery 做得很好。他们在做什么
// Expose jQuery to the global object
window.jQuery = window.$ = jQuery;
意味着你可以调用 jQuery 或 $,并且它“只是存在”,它在全局范围内存在。您可能喜欢模块或单例模式 - 1479319 在这方面有一些非常好的答案
【讨论】:
谢谢 =) 信息非常清晰有用,我会尝试实现这个语法【参考方案2】:1) 这会创建一个闭包,因此内部的所有内容都是此闭包的本地内容,只有作者希望它公开的内容和全局命名空间中的内容。
2) window
表达式将一个对window
对象的引用传递到该闭包中,它是function( window, undefined )
的第一个参数,这也会导致它立即被调用。
【讨论】:
【参考方案3】:您正在查看的内容称为匿名函数。匿名函数可以像普通变量一样被传递。它们在声明后也会立即执行。在理解这个概念方面,这是一个相当大的范式转变。我敢肯定 *** 上还有其他一些解释可以解释它们。
(...your code...)(argument);
所以在你的第二个例子中:
);
// Expose jQuery to the global object
window.jQuery = window.$ = jQuery;
)(window);
参数 window
被传递到示例 1 中启动的匿名函数
【讨论】:
正如尼克斯的回答:闭包是一个匿名函数。以上是关于如何自定义构建基于 Jquery 的 javascript API 以及关于 Jquery 中使用的语法的一些问题的主要内容,如果未能解决你的问题,请参考以下文章