如何自定义构建基于 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 中使用的语法的一些问题的主要内容,如果未能解决你的问题,请参考以下文章

如何构建自定义 jQuery 缓动/弹跳动画?

如何使用 jQuery 自定义动画 <ul> 轮播滑块?

如何基于 MaterialDesign 构建自定义组件?

如何基于现有的创建自定义 jquery 触发器

webpack loader自定义编写

webpack loader自定义编写