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 相关文章推荐
js 关于=+与+=日期函数使用说明(赋值运算符)
Nov 15 Javascript
Jquery ajax执行顺序 返回自定义错误信息(实例讲解)
Nov 06 Javascript
js Object2String方便查看js对象内容
Nov 24 Javascript
详解Js模板引擎(TrimPath)
Nov 22 Javascript
文件上传插件SWFUpload的使用指南
Nov 29 Javascript
jQuery表单元素选择器代码实例
Feb 06 Javascript
浅谈Node.js 子进程与应用场景
Jan 24 Javascript
jQuery+ajax读取json数据并按照价格排序示例
Mar 28 jQuery
JS原生带缩略图的图片切换效果
Oct 10 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
Dec 25 Javascript
vue如何使用外部特殊字体的操作
Jul 30 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
Nov 05 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
PHP中round()函数对浮点数进行四舍五入的方法
2014/11/19 PHP
浅谈php+phpStorm+xdebug配置方法
2015/09/17 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
CI框架使用composer安装的依赖包步骤与方法分析
2016/11/21 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
js各种验证文本框输入格式(正则表达式)
2010/10/22 Javascript
高性能Javascript笔记 数据的存储与访问性能优化
2012/08/02 Javascript
JQuery的AJAX实现文件下载的小例子
2013/05/15 Javascript
JS获取单击按钮单元格所在行的信息
2014/06/17 Javascript
对 jQuery 中 data 方法的误解分析
2014/06/18 Javascript
javascript实现的HashMap类代码
2014/06/27 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
2014/11/28 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
2014/12/20 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
jQuery数据检索中根据关键字快速定位GridView指定行的实现方法
2016/06/08 Javascript
AngularJS 指令的交互详解及实例代码
2016/09/14 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
对vue.js中this.$emit的深入理解
2018/02/23 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
[36:09]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
2017/11/15 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
2018/09/04 Python
python输入整条数据分割存入数组的方法
2018/11/13 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
Python+Django+MySQL实现基于Web版的增删改查的示例代码
2020/05/13 Python
简述python Scrapy框架
2020/08/17 Python
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
金士达面试非笔试
2012/03/14 面试题
人事主管岗位职责
2014/01/30 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
金砖之国观后感
2015/06/11 职场文书
你有一份《诚信考试承诺书》待领取
2019/11/13 职场文书
Maven学习----Maven安装与环境变量配置教程
2021/06/29 Java/Android