详解jQuery插件开发入门
程序员文章站
2022-04-21 20:25:51
...
前言
jQuery插件开发包括两种:
给jQuery添加静态方法
给jQuery的原型添加方法
给jQuery添加静态方法
直接添加新的全局函数
jQuery.foo = function() { alert('This is a test. This is only a test.'); }
2.使用jQuery.extend(object)
jQuery.extend({ foo: function() { alert('This is a test. This is only a test.'); }, bar: function(param) { alert('This function takes a parameter, which is "' + param +'".'); } });
对于一些全局配置的插件,可以在插件中进行调用,这样直接引用插件javascript即可,不用再调用
给jQuery的原型添加方法
这是插件开发中最常用的一种方法
最简单的形式
(function($){ $.fn.pluginName = function() { // code }; })(jQuery);
上下文
在插件函数的立即作用域中,关键字this指向调用插件的jQuery对象,不需要再用$包裹
(function($){ $.fn.pluginName = function() { // 没有必要再写$(this),因为"this"就是jQuery对象 }; })(jQuery);
保持链式调用
为了保持链式调用,插件请return this。
设置默认参数并将之暴露出来
(function($){ $.fn.pluginName = function(options) { var opts = $.extend({}, $.fn.hilight.defaults, options); }; $.fn.pluginName.defaults = { foo: 'bar' }; })(jQuery);
这样用户既可以用过传参也可以通过修改$.fn.pluginName.defaults来修改默认参数
暴露一些公有函数
(function($){ $.fn.pluginName = function(options) { var opts = $.extend({}, $.fn.pluginName.defaults, options); }; $.fn.pluginName.defaults = { foo: 'bar' }; $.fn.pluginName.foo = function() { return 'bar'; }; })(jQuery);
这样用户既可以调用公有函数,也可以去修改它。
更安全的闭包写法
;(function($,window,document,undefined){ $.fn.pluginName = function() { // code }; })(jQuery,window,document);
加上“;”是为了防止插件之前代码没有“;”引发的错误,加上window和document是这样window等系统变量在插件内部就有了一个局部的引用,可以提高访问速度,同时内部也可以压缩这些变量,undefined是为了防止他人误修改undefined引发插件bug。
更多
以下出自网友的博客
(function () { var Plugin, privateMethod; //插件的私有方法 /** * 这里是一个自运行的单例模式。 * */ Plugin = (function () { /** * 插件实例化部分,初始化时调用的代码可以放这里 */ function Plugin(element, options) { //将插件的默认参数及用户定义的参数合并到一个新的obj里 this.settings = $.extend({}, $.fn.plugin.defaults, options); //将dom jquery对象赋值给插件,方便后续调用 this.$element = $(element); } /** * 插件的公共方法,相当于接口函数,用于给外部调用 */ Plugin.prototype.doSomething = function () { /** * 方法内容 */ }; return Plugin; })(); /** * 插件的私有方法 */ privateMethod = function () { }; /** * 这里是关键 * 定义一个插件 plugin */ $.fn.plugin = function (options) { var instance; instance = this.data('plugin'); /** *判断插件是否已经实例化过,如果已经实例化了则直接返回该实例化对象 */ if (!instance) { return this.each(function () { //将实例化后的插件缓存在dom结构里(内存里) return $(this).data('plugin', new Plugin(this, options)); }); } if (options === true) return instance; /** * 优雅处: 如果插件的参数是一个字符串,则 调用 插件的 字符串方法。 * 如 $('#id').plugin('doSomething') 则实际调用的是 $('#id).plugin.doSomething(); * doSomething是刚才定义的接口。 * 这种方法 在 juqery ui 的插件里 很常见。 */ if ($.type(options) === 'string') instance[options](); return this; }; /** * 插件的默认值 */ $.fn.plugin.defaults = { property1: 'value', property2: 'value' }; /** * 优雅处: 通过data-xxx 的方式 实例化插件。 * 这样的话 在页面上就不需要显示调用了。 */ $(function () { return new Plugin($('[data-plugin]')); }); }).call(this);
以上就是详解jQuery插件开发入门的详细内容,更多请关注其它相关文章!
上一篇: JavaScript面向对象