js封装成插件的步骤方法


Posted in Javascript onSeptember 11, 2017

由于项目原因,工作一年多还没用js写过插件,项目太成熟,平时基本都是在使用已经封装好的功能插件。感觉自己好low......这两天想自己抽空写一个canvas画统计图与折现图的插件,所以就去网上学习了下如何封装.....虽然之前看了很多源码,但是感觉就算了解也是野路子.....

什么是封装呢?

我的理解就是 把一个功能单独做成一个组件,就像做饺子,以前做饺子必须自己先用面粉做饺子皮,再做饺子馅,然后再手工包饺子,但是现在人们发明了自动包饺子机器,虽然机器里面的每一步骤和你自己包饺子是一样的,但是实际上你现在需要做的就只有一件事,就是放原料。这边机器就是封装好的插件,而原料就是你要传的参数

为什么要把js功能封装成插件呢?我觉得有以下几点吧

1、便于代码复用

2、避免各个相同功能组件的干扰,可能会有作用域的一些问题吧

3、便于维护,同时利于项目积累

4、不觉得一直复制粘贴很low么.......

我在网上看到的封装好像有两种,一种是js的原生封装,一种是jquery的封装。这边我先讲一下原生封装吧。

我们在封装的时候会把js代码放到一个自执行函数里面,这样可以防止变量冲突。

(function(){

  ......

  ......

}()}

然后再创建一个构造函数

(function(){

  var demo = function(options){

    ......

  }

}())

把这个函数暴露给外部,以便全局调用

(function(){
  var demo = function(options){
    ......
  }
  window.demo = demo;
}())

其实现在你可以直接调用了,封装好了,虽然没实现什么功能

var ss = new demo({
  x:1,
  y:2
});

或者

new demo({
  x:2,
  y:3
});

然后传参怎么搞呢,我们一个插件一般有一些必选参数或者可选参数,在我看来可选参数不过就是在插件里面给了默认值罢了。我们传的参数会覆盖插件中的默认参数,可以用$.extend({})覆盖

(function(){

  var demo = function(options){

    this.options = $.extend({

      "x" : 1,

      "y" : 2,

      "z" : 3

    },options)

  }

  window.demo = demo;

}())

然后你可以在在初始化构造函数的时候执行一些操作

(function(){
  var demo = function(options){
    this.options = $.extend({
      "x" : "1",
      "y" : "2",
      "z" : "3"
    },options);
    this.init();
  };
  demo.prototype.init = function(){
    alert("x是"+this.options.x+" y是"+this.options.y+" z是"+this.options.z);
  };
  window.demo = demo;
}());
new demo({
  "x" :"5",
  "y" :"4"
});
</script>

就是这样了。一个超级简单的封装

js封装成插件的步骤方法 

我这边有个疑问,extend只是jquery有吗,js对象有什么代替方法吗?晚点在看看............. 

还有需要提的是封装js的时候我们要考虑周全,比如它的扩展性和兼容性,还有性能怎么样,还有没必要的就不需要封装了......要有选择性。

现在网上已经完成的插件数不胜数,而且功能又十分强大,但是恰恰是这点,有的时候一个很大的插件我们只用到很小的一部分,那么就需要我们自己修改成适合我们自己的了,而且有些项目的风格和现在的插件风格也不同,所以关键是要适合自己的项目。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一个判断email合法性的函数[非正则]
Dec 09 Javascript
jquery 简单的进度条实现代码
Mar 11 Javascript
js实现点小图看大图效果的思路及示例代码
Oct 28 Javascript
浅谈Javascript中深复制
Dec 01 Javascript
js实现点击向下展开的下拉菜单效果代码
Sep 01 Javascript
js多功能分页组件layPage使用方法详解
May 19 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
Jun 22 Javascript
Angular 4中如何显示内容的CSS样式示例代码
Nov 06 Javascript
Thinkjs3新手入门之如何使用静态资源目录
Dec 06 Javascript
使用vue-cli创建项目的图文教程(新手入门篇)
May 02 Javascript
js尾调用优化的实现
May 23 Javascript
javascript实现搜索筛选功能实例代码
Nov 12 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
Sep 11 #Javascript
Chrome调试折腾记之JS断点调试技巧
Sep 11 #Javascript
JS中的Replace()传入函数时的用法详解
Sep 11 #Javascript
浅谈vue+webpack项目调试方法步骤
Sep 11 #Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
Sep 11 #Javascript
node.js 利用流实现读写同步,边读边写的方法
Sep 11 #Javascript
checkbox:click事件触发span元素内容改变的方法
Sep 11 #Javascript
You might like
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
2014/06/12 PHP
使用PHP生成图片的缩略图的方法
2015/08/18 PHP
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
2014/05/22 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
2016/03/14 Javascript
JavaScript隐式类型转换
2016/03/15 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
javascript原生封装一个淡入淡出效果的函数测试实例代码
2018/03/19 Javascript
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
vue环形进度条组件实例应用
2018/10/10 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
解决vue watch数据的方法被调用了两次的问题
2020/11/07 Javascript
Python getopt模块处理命令行选项实例
2014/05/13 Python
Python写的一个简单DNS服务器实例
2014/06/04 Python
Python的ORM框架中SQLAlchemy库的查询操作的教程
2015/04/25 Python
通过pycharm使用git的步骤(图文详解)
2019/06/13 Python
详解Python中正则匹配TAB及空格的小技巧
2019/07/26 Python
python通过实例讲解反射机制
2019/10/17 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
jupyter notebook 参数传递给shell命令行实例
2020/04/10 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
Python filter过滤器原理及实例应用
2020/08/18 Python
HTML5离线应用与客户端存储的实现
2018/05/03 HTML / CSS
html5 postMessage前端跨域并前端监听的方法示例
2018/11/01 HTML / CSS
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
小学运动会广播稿200字(十二篇)
2014/01/14 职场文书
2014年小学植树节活动方案
2014/03/02 职场文书
少儿节目主持串词
2014/04/02 职场文书
小学老师寄语大全
2014/04/04 职场文书
党员群众路线自我剖析材料
2014/10/06 职场文书
2014年话务员工作总结
2014/11/19 职场文书
宝宝满月祝酒词
2015/08/10 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
使用refresh_token实现无感刷新页面
2022/04/26 Javascript