这个 JavaScript/jQuery 语法是什么意思?

IT技术 javascript jquery
2021-02-26 19:58:36

以下语法是什么意思?

(function($){
    $.fn.columnize = function(options) {
    ...

什么function($)

什么$.fn. …

6个回答

在编写插件时使用此约定以确保与其他使用 $ 符号的 Javascript 库没有冲突,同时确保插件作者仍然可以使用此符号:

(function($){
    ...
})(jQuery); 

作者使用单个参数 ($) 声明了一个匿名函数,然后立即调用它并将 jQuery 对象传递给它。这可确保调用该函数并定义其中的所有内容。

更长的符号可能是:

function MyDefs($){
    ...
}
MyDefs(jQuery);

虽然这会MyDefs在全局命名空间中创建一个变量匿名函数模式将全局命名空间留空,避免冲突。

出色的解释詹姆斯。但是,如果多个插件执行 '$.fn.columnize...' 会发生什么 - 这不会导致冲突吗?这是我一段时间以来一直想研究的东西,但是由于我还没有编写插件,所以还没有变得足够紧急。
2021-04-24 19:58:36
好的,我在这里找到了答案:stackoverflow.com/questions/1204822/...
2021-04-25 19:58:36
谢谢,现在我明白了。我想从外部代码调用我的插件的方法。我怎样才能公开它?有没有办法声明接口?
2021-05-02 19:58:36
这就是我的想法,所以这只是想出一个不太可能已经存在的名称的情况 - 一种粗略的命名空间机制。遗憾的是没有一种万无一失的方法来处理这个问题,因为两个真正有用的插件相互冲突只是时间问题。
2021-05-03 19:58:36
@belugabob; 它会,是的,因为你正在重新分配一个 var。
2021-05-16 19:58:36

它将columnize函数声明为一个 jQuery 插件,允许您在这样的元素上使用它$('.someSelector').columnize()您可以在此处阅读有关插件创作的更多信息

它可能是一个 jQuery 扩展,它在最后基本上通过 (jQuery) 像

(function($){
    //$ is jQuery here

    //added columnize function to existing jQuery object
    $.fn.columnize = function(options) {

    }

})(jQuery);
是的,它是一个 jQuery 插件。我发现它与代理模式的语法相同。顺便说一下,我需要在插件内部调用一个函数。当我尝试调用它时,我收到一个错误(函数未定义),尽管它实际上在浏览器中有效。如何使函数可见?在插件界面中?谢谢
2021-04-26 19:58:36
我可以知道你如何调用这个函数吗?可能会发布一些代码?
2021-05-09 19:58:36

我刚刚发现这个......它是代理模式吗?

代理模式

结合上述知识,作为 JavaScript 开发人员,您将获得很大的力量。结合它的一种方法是在 JavaScript 中实现代理模式,从而实现面向方面编程 (AOP) 的基础:

(function() {
  // log all calls to setArray
  var proxied = jQuery.fn.setArray;
  jQuery.fn.setArray = function() {
    console.log(this, arguments);
    return proxied.apply(this, arguments);
  };
})();

以上将其代码包装在一个函数中以隐藏“代理”变量。它将 jQuery 的 setArray 方法保存在一个闭包中并覆盖它。然后代理记录对该方法的所有调用,并将调用委托给原始方法。使用 apply(this, arguments) 保证调用者不会注意到原始方法和代理方法之间的区别。

不要被$. 实际上,$是 JavaScript 中的有效变量名(所有包含$, source (PDF) 的变量也是如此)。

所以,第一行可以改写为

(function (someVariable) {

这可能看起来更常见。其余的,是的,这是一个代理模式,詹姆斯怀斯曼的回答是解释发生了什么。