一入前端深似海,从此红尘是路人系列第二弹之如何简单粗暴的编写出一个属于自己的插件
作为一个刚入行不久的web前端工程师,虽然经验不多,但是基于本人的性格,有自己掌握的并且认为比较好玩比较高大上的东西当然是要献给大家的。此博客发表后也希望可以帮到一些还在为插件编写徘徊的兄弟们。
1、首先先来一段我自己项目开发中最喜欢的插件的写法,也是一个比较经典的jQuery插件写法。
//闭包限定命名空间 ;(function($,doc,win){ var Plugins = function(options){ this.setting = { //这里是插件中各种参数,各种属性配置 pluginsID: '', alertHtml: '' }; /** * 这里如果有懂JavaScript设计模式的朋友们应该知道 * 这是比较常见的适配器模式,通过适配器来适配传入的参数 */ for(var i in this.setting){ this.setting[i] = options[i] || this.setting[i]; } //或者通过$.extend(this.setting,options)进行适配,不过这样可能会多添加属性,小伙伴们可以自行去测试 //调用插件方法 this.init(); } Plugins.prototype = { myFn: function(){ var self = this; $(self.setting.pluginsID).click(function(){ alert(self.setting.alertHtml); }) }, init: function(){ //定义变量self保存this,避免this指向偏移 var self = this; self.myFn(); } }; //将编写好的插件暴露出去 window['Plugins'] = Plugins; })(jQuery,document,window);
对于为什么会在代码最前面加上一个";",这个也是为了避免后期因为利用 grunt,gulp等构建工具进行代码的压缩打包产生的不必要的冲突。插件调用方法如下:
$(function(){ //插件的调用 new Plugins({ pluginsID: '#plugins', alertHtml: '欢迎来到插件世界' }); })
2、接下来给大家分享一下jQuery官方提供的一个标准化的开发模式
;(function($){ $.fn.plugins = function(options){ var setting = { //各种参数,各种属性 } var options = $.extend(setting,options); this.each(function(){ //各种功能 //定义变量self保存当前对象 var self = $(this); self.find(options.pluginsID).click(function(){ alert(options.alertHtml); }); }); // 返回当前对象,可以在插件调用的同时进行链式操作 return this; } })(jQuery);
调用方法如下:
$(function(){ //插件的调用 $('body').plugins({ pluginsID: '#plugins', alertHtml: '欢迎来到插件世界' }); })
那么上面的 return this怎么进行链式操作呢?操作也是相当的简单,具体操作如下:
$(function(){ //return this将插件的调用对象$('body')重新返回了回去,因此只需要在插件调用后进行链式操作即可 $('body').plugins({ pluginsID: '#plugins', alertHtml: '欢迎来到插件世界' }).find('#plugins').css({background:'red'}); })
怎么样,这种操作是不是很方便。
3.原生JavaScript插件开发。
;(function(doc,win){ var Plugins = function(options) { this.setting = { pluginsID: '', alertHtml: '' }; for(var i in this.setting){ this.setting[i] = options[i] || this.setting[i]; } this.init(); }; // 通过单例模式抽象JavaScript一些属性样式方法 Plugins.prototype = { g: function(id){ return document.getElementById(id); }, on: function(id,type,fn){ this.g(id)['on'+type] = fn; }, init: function(){ var self = this; self.on(self.setting.pluginsID,'click',function(){ alert(self.setting.alertHtml) }) } }; window['Plugins'] = Plugins; })();
调用方法如下:
new Plugins({ pluginsID: 'plugins', alertHtml: '欢迎来到插件世界' });
以上原生JavaScript插件的开发是不是和前面的两种十分的相似,因为他们都是通过原型模式进行插件的中的继承从而实现插件的功能。还有一种原生JavaScript插件的开发便是动态原型模式进行开发,话不多说,直接上code。
;(function(doc,win){ var Plugins = function(options) { this.setting = { pluginsID: '', alertHtml: '' }; for(var i in this.setting){ this.setting[i] = options[i] || this.setting[i]; } // 使用必要条件进行检测,然后再往其原型中添加函数。 if(typeof this.NULL != "function") { // 缓存Plugins.prototype var proto = Plugins.prototype; // 抽象获取元素id方法 proto.g = function(id){ return document.getElementById(id); }, // 抽象元素绑定事件 proto.on = function(id,type,fn){ this.g(id)['on'+type] = fn; }, proto.init = function(){ var self = this; self.on(self.setting.pluginsID,'click',function(){ alert(self.setting.alertHtml) }) } } }; window['Plugins'] = Plugins; })();
调用方法如下:
new Plugins({ pluginsID: 'plugins', alertHtml: '欢迎来到插件世界' }).init();
以上几种便是我知道的一些常见插件的编写方式,相信各位小伙伴们看完对插件的开发也有了一定的了解。当然对于插件开发,其中最重要的就是继承和闭包了。对于继承这里我就不多说了,可以参考我另外一篇文章https://my.oschina.net/qiangdada/blog/745061。对于闭包,过段时间我也会写一篇有关的文章给各位小伙伴作为参考理解的。
小伙伴们,看完这篇文章后你有没有找到属于自己的那款简单粗暴的插件开发形式呢?
原文发布时间为:2016年09月16日
原文作者:qiangdada
本文来源:开源中国 如需转载请联系原作者

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
一入前端深似海,从此红尘是路人系列第一弹之浅析JavaScript继承
继承算是JavaScript中的一大难点也是必须掌握的知识点。接下来我会列举一些我们常见的继承并给出对应一些的code方便大家理解。 1.类式继承,既子类原型继承父类实例化。但是当我利用new关键字实例化子类的时候,当我改变子类继承到父类属性的时候,会污染到再次实例化的子类它所继承到的属性。具体如下 function SuperClass(){ this.superValue = true; this.languages= ['JS','JAVA']; } SuperClass.prototype.getSuperValue = function(){ return this.superValue; } function SubClass(){ this.subValue = false; } SubClass.prototype = new SuperClass(); SubClass.prototype.getSubValue = function(){ return this.subValue; } var sub = new SubClass(); console.log(su...
- 下一篇
一入前端深似海,从此红尘是路人系列第三弹之浅析JavaScript闭包
前言:最近由于公司项目太忙,很久没有更新博客了,加上之前就一直说要发表一篇有关闭包的博客帮助小伙伴们好好的理解一些JavaScript中的难点。所以,今天趁着国庆假期前赶紧写了去,写完国庆好好出去浪个够。 首先,必须要提的就是闭包它绝对算的上是JavaScript中的一大难点,当然也是一大重点。N多高级程序都需要或者必须用到闭包才能得以实现。参考了N篇很牛叉的对于闭包理解的文章,接下来我将陈述一下鄙人自己对于闭包的理解,希望可以帮助小伙伴们通俗切入闭包这个点。 1、变量作用域 理解闭包很重要的一点就是需要先理解JavaScript特殊的变量作用域。 而变量作用域无非两种形式,全局变量和局部变量。而在JavaScript中,所有的函数它都可以在其内部访问到全局变量。 var n = 123; function test1(){ alert(n); } test1(); //123 而在函数外部也无法读取函数内的局部变量。 function test1(){ var n=123; } test1(); alert(n); // Uncaught ReferenceError: n is n...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS关闭SELinux安全模块
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装