好的,我想我理解Difference between jQuery.extend and jQuery.fn.extend?了。
因为一般扩展器可以扩展任何对象,而fn.extend是用于插件函数,这些插件函数可以直接从jquery对象调用,并且可以使用一些内部jquery巫术来调用。
因此,似乎有人会以不同的方式调用它们。如果使用常规扩展通过添加函数y来扩展对象obj,则该方法将附加到对象obj.y(),但如果使用fn.extend,则它们将直接附加到jquery对象$.y()...我是否得到了正确的是或否,如果不是,我的理解有什么错误?
现在我的问题是:
我正在读的这本书提倡使用
jQuery.fn.extend({
a: function() { },
b: function() { }
});
语法,但在文档中它说
jQuery.fn.a = function() { };
我猜如果你也想要b,那就是
jQuery.fn.b = function() { };
它们在功能和性能方面是否等效,如果不是,区别是什么?
非常感谢。我在挖jQuery!
发布于 2010-04-10 02:42:19
它们之间有非常细微的区别。在性能方面(并不是说这是个问题),与直接声明像jQuery.fn.foo = function(){ };
这样的函数相比,jQuery.fn.extend
会更慢。我说的是完全可以忽略的差异,。
不同的是,jQuery.fn.extend()
允许你同时添加多个插件函数,并且可能会让你的代码看起来更干净一些,这取决于你创作的插件类型。
jQuery.fn.a = function(){};
jQuery.fn.b = function(){};
完全相同于
jQuery.fn.extend({
a: function(){ },
b: function(){ }
});
发布于 2012-06-13 03:01:53
这两种方式几乎是相同的。然而,在以下几个方面存在一些小的差异-
速度:
可以忽略不计。您可以忽略这一方面,因为您不太可能注意到两者之间的性能差异。
代码样式:
扩展版本遵循Object字面代码风格,这对某些人来说似乎更优雅一些。例如,如果您的插件大量使用Object文本,您可能更喜欢使用$.extend({})包装它。
将您的插件命名为别处:
使用$.fn.a风格还有另一个(在我看来很重要)的好处--你可以将插件的名字存储在代码中的任何地方,然后在将插件添加到jQuery的命名空间时使用它的引用。当使用对象文字进行扩展时,无法做到这一点。这一优势在某种程度上与您的代码长度和插件名称出现的次数有关。有人可能会争辩说,普通的程序员很少更改他的插件的名称,即使他这样做了,在大多数情况下也不会花很长时间。
示例:
;(function($) {
// Declare your plugin's name here
var PLUGIN_NS = 'myPluginName';
// ... some arbitrary code here ...
// The jQuery plugin hook
$.fn[ PLUGIN_NS ] = function( args ) {
if ( $.type(args) !== 'object' )
var args = {};
var options = $.extend({}, $.fn[ PLUGIN_NS ].defaults, args);
// iterate over each matching element
return this.each({
var obj = $(this);
// we can still use PLUGIN_NS inside the plugin
obj.data( PLUGIN_NS+'Data' , args );
// ... rest of plugin code ...
});
};
// ----------------
// PRIVATE defaults
// ----------------
var defaults = {
foo: 1,
bar: "bar"
};
// ------------------------------------------------------------
// PUBLIC defaults
// returns a copy of private defaults.
// public methods cannot change the private defaults var.
// ------------------------------------------------------------
// we can use PLUGIN_NS outside the plugin too.
$.fn[ PLUGIN_NS ].defaults = function() {
return $.extend({}, defaults);
};
})(jQuery);
现在我们可以调用插件,并使用默认值,如下所示:
$("div#myDiv").myPluginName({foo:2});
var originalFoo = $("div#myDiv").myPluginName.defaults().foo;
要更改插件的名称,请更改PLUGIN_NS变量。这可能比在插件代码中更改每次出现的myPluginName更可取。
https://stackoverflow.com/questions/2609951
复制相似问题