我正在编写一个jQuery插件,我想知道如何确保我不会覆盖未来的jQuery本机方法。
例如,我的插件名为Foo,用法为$('selector').foo()
。
jQuery 2.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);
这是最好的方法吗?
答案 0 :(得分:8)
您可以跳过if
语句并将定义检查构建到函数声明中。
(function($){
$.fn.foo = $.fn.foo || function () {
// only used if $.fn.foo is undefined
}
})(jQuery)
答案 1 :(得分:2)
我认为你会更好:
if ($.foo !== undefined) {
alert('there is something at foo');
return;
};
原因是,你的插件看起来像这样:
$.foo = {
doSomething: function() { /* do something*/ },
doSomethingElse: function() { /* do something else*/ }
};
上面的typeof
不是函数,而是对象,因此示例中的条件将不会按预期运行。
答案 2 :(得分:0)
您可能希望以类似于常规JavaScript编程getElementsByClassName
函数的方式执行此操作 - 您检查它是否存在并创建它,如果不存在。
答案 3 :(得分:0)
稍微好一点(性能方面)版本:
jQuery.fn.foo || (jQuery.fn.foo = function(){
var $ = jQuery;
(your code goes here)
});