Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 确保jQuery插件获胜的最佳方法是什么';你从来没有覆盖过jQuery本机方法吗?_Javascript_Jquery_Jquery Plugins - Fatal编程技术网

Javascript 确保jQuery插件获胜的最佳方法是什么';你从来没有覆盖过jQuery本机方法吗?

Javascript 确保jQuery插件获胜的最佳方法是什么';你从来没有覆盖过jQuery本机方法吗?,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,我正在编写一个jQuery插件,我想知道如何确保我永远不会覆盖未来的jQuery本机方法 例如,我的插件名为Foo,用法是$('selector').Foo() jquery2.6已经注意到Foo的流行,并决定将其包含在核心包中。它也通过$('selector').foo()使用 我不想让我的Foo覆盖jQuery的原生Foo(或者冲突) 这就是我想到的 (function($) { // If jQuery adds this method, we don't want to overw

我正在编写一个jQuery插件,我想知道如何确保我永远不会覆盖未来的jQuery本机方法

例如,我的插件名为Foo,用法是
$('selector').Foo()

jquery2.6已经注意到Foo的流行,并决定将其包含在核心包中。它也通过
$('selector').foo()使用

我不想让我的Foo覆盖jQuery的原生Foo(或者冲突)

这就是我想到的

(function($) {

  // If jQuery adds this method, we don't want to overwrite it
  if (typeof $.foo === 'function') {
    return;
  };

  $.fn.foo = function() {
     // Foo
  };  

})(jQuery);

这是最好的方法吗

您可能希望以与常规JavaScript编程类似的方式执行此操作,即使用
GetElementsByCassName
函数-检查它是否存在,如果不存在,则创建它。

我认为您最好使用:

  if ($.foo !== undefined) {
    alert('there is something at foo');
    return;
  };
原因是,您的插件可能如下所示:

$.foo = {
     doSomething: function() { /* do something*/ },
     doSomethingElse: function() { /* do something else*/ }
  }; 

上面的
类型不是函数,而是对象,因此示例中的条件不会像您预期的那样运行。

您可以跳过
if
语句,并在函数声明中生成定义检查

(function($){

  $.fn.foo = $.fn.foo || function () {
    // only used if $.fn.foo is undefined
  }

})(jQuery)
稍好一点(性能方面)的版本:


如果您的foo实现与jQuery不同,那么您的插件将出现错误。。。这可能是一个很好的练习,也许我会试试:-)谢谢你的回答。也许我做错了什么,但当我发出
alert($.unwrap)
即使使用jquery1.4和
警报($),我也会得到
未定义的
为我提供了缩小jQuery函数的
toString()
。这很性感!非常感谢你的回答。我认为没有人能超越这一点。我总是忘记利用短路求值和JavaScript返回第一个truthy操作数。@alx-您应该注意这对于属性是不安全的,例如
.length
.active
,以及默认为
0
的其他内容将在此处被覆盖,即使被jQuery使用,@Nick jQuery原型上也只有三个非函数属性:
jQuery
length
选择器
。只要你不把你的插件命名为这三个插件中的任何一个,你就可以了
jQuery.fn.foo || (jQuery.fn.foo = function(){
var $ = jQuery;
(your code goes here)
});