我刚刚开始编写jQuery插件.我写了三个小插件,但我只是简单地将行复制到我的所有插件中而实际上并不知道它意味着什么.有人能告诉我更多关于这些的事吗?也许有一天解释会在编写框架时派上用场:)
这是做什么的?(我知道它以某种方式扩展了jQuery,但还有其他有趣的事情要知道)
(function($) {
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
以下两种编写插件的方法有什么区别:
类型1:
(function($) {
$.fn.jPluginName = {
},
$.fn.jPluginName.defaults = {
}
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
类型2:
(function($) {
$.jPluginName = {
}
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
类型3:
(function($){
//Attach this new method to jQuery
$.fn.extend({
var defaults = {
}
var options = $.extend(defaults, options);
//This is where you write your plugin's name
pluginname: function() {
//Iterate over the current set of matched elements
return this.each(function() {
//code to be inserted here
});
}
});
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
我可能会离开这里,也许意味着同样的事情.我很迷惑.在某些情况下,这似乎不适用于我使用Type 1编写的插件.到目前为止,Type …
在查看SlickGrid源代码时,我遇到了以下模式:
(function ($) {
var SlickEditor = {
TextCellEditor: function (args) {
...
},
LongTextCellEditor: function (args) {
...
}
};
$.extend(window, SlickEditor);
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,它使用立即调用来定义各种函数对象,然后将它们合并到全局命名空间中.
所以我可以像这样全局定义我的函数,它会产生相同的效果,对吧?
function TextCellEditor (args) {
...
}
function LongTextCellEditor (args) {
...
}
Run Code Online (Sandbox Code Playgroud)
我能看到的唯一区别是,在第一个版本中,我可以用$速记来引用该jQuery对象.除此之外,两种情况下的结果都是相同的.
我想知道我是否遗漏了什么.也许还有另外一个很好的理由这样做?
更新:请注意,我意识到使用这种立即调用模式允许使用匿名函数中声明的私有变量.但是在这种情况下没有声明任何变量,并且函数无论如何都被注入到全局范围中.所以我还是想知道是否有任何真正的区别.
一些答案指出,引用局部变量比引用全局变量要快得多.如果我$从TextCellEditor()构造函数中引用,这仍然适用.因为它是在外部匿名函数的范围内定义的,所以它$不是本地的TextCellEditor().
所有评论赞赏.