3
(function($) {
    $.fn.myFunction = function(config) {

        var defaults = {
            setting1: 'myDiv',
            setting2: ''
        };
        var config = $.extend(defaults, config); 

        //code here


    };

})(jQuery)


$(document).ready(function() {

    $.fn.myFunction({
        setting1: 'myDiv',
        setting2: ''
    });

});

这就是我一直在使用 jQuery 插件的方式,但我最近了解到它应该像这样使用:

$('#myDiv').myFunction({
    setting1: 'myDiv',
    setting2: ''
}); 

1)我认为这允许使用$(this)for $('#myDiv')

2)$(document).ready(function()需要吗?

3) 我一直在使用这个 jQuery 函数的方式有什么不利之处吗?

4)如果$('#myDiv').myFunction()是正确的用法,如果它只是一个在文档就绪时运行的函数,你将如何调用该函数 -在这里查看我的用法:https ://stackoverflow.com/a/12316349/1455709 。这仅仅是对函数的错误使用吗?

4

2 回答 2

2
  1. return this是的,如果你从你的函数内部进行适当的链接。

  2. 是的,如果您的代码在加载 dom 之前运行。

  3. 它不是真正的 jQuery,它不像人们期望的那样工作。有人可以称它为,但$('#myDiv').myFunction()它不会按预期执行。

  4. 如果您想要一个可以随时运行的函数,请不要将它添加到 jQuery 原型 ( $.fn) 中。相反,您可以将它添加到$其他不需要选择器的 jQuery 函数中,$.trim例如。然后你可以这样称呼它:$.myFunction(options);

于 2012-09-18T07:39:54.717 回答
2

调用$.fn.myFunction()和调用$('#myDiv').myFunction()是两个不同的东西。没有对错之分——这取决于你在做什么。

调用 $.fn.myFunction()

这本质上是一个静态函数,如果你愿意,你可以这样使用它。在 jQuery 的世界里,.fn就像调用. 这是允许的,但它是一个与特定 jQuery 对象无关的静态函数调用。如果你只想要一个静态函数调用,那么你可以这样做,但这通常不是 jQuery 原型的使用方式,我通常不会推荐它。如果你只想要一个静态函数并想使用 jQuery 命名空间,你可以这样做:.prototype$.fn.myFunction()jQuery.prototype.myFunction()

$.myFunction = function(args) {/* your code here */};

然后像这样称呼它:

$.myFunction();

因为根本不需要使用原型。

打电话$('#myDiv').myFunction()

原型(例如.fn,在 jQuery 世界中用于向实际的 jQuery 对象添加方法时使用。

当您这样做时,这$('#myDiv').myFunction()是一个实时 jQuery 对象的成员函数。您可以this在实现内部进行引用myFunction(),它将是一个 jQuery 对象,在这种情况下,它包含对应于id="myDiv". 如果你从你的方法返回 jQuery 对象,你也可以使用链接。

使用哪个?

如果您的代码对 jQuery 对象进行操作,那么它应该是实时 jQuery 对象上的一个方法,并且它应该可以访问this以获取 jQuery 对象实例数据,并且您应该将其声明为$.fn.myFunction = function() {}; and call it as$('#myDiv').myFunction()` .

如果您的代码不对 jQuery 对象进行操作,而只是您调用的实用程序函数,并且它并不总是对 jQuery 对象进行操作,那么您应该将其声明为$.myFunction = function() {};并且应该将其称为$.myFunction().

于 2012-09-18T07:45:56.487 回答