原文地址:https://github.com/lianxiaozhuang/blog
转载请注明出处
 

1. 点击add可以添加个自input的内容到div里并实现变颜色

 <div id="demo-1">
<input type="" name="" id="" value="好的" />
<button id="add-1">add</button>
</div>
<div id="demo-2">
<input type="" name="" id="" value="11" />
<button id="add-2">add</button>
</div>

整个插件写在一个立即执行函数里;就是 function(){ }(); 函数自执行;
保证里面的变量不会与外界互相影响,头部的win啊,doc啊 $ 啊
都是底部的window,document,jQuery的映射;方便内部直接调用;
当然你不引用jq的话头部的$和底部的jQuery干掉;你若引用了更过的依赖
可以依次添加;最后面的undefined可不写;最好写了,保证里面再出现
的undefined是未定义的意思;不被其他东西赋值。

;(function(win,doc,$,undefined){

}(window,document,jQuery))

好了下面是时候展现真正的技术了
function前的 ;(分号) 这不是写错了,为了防止那个二货写的js结束没有分号;
而可能发生语法上的混淆报错;

+function(){   }()
!function(){ }()
~function(){ }()
viod function(){ }()
(function(){ })()
(function(){ }())

function前的 +(加号或者 ! ~);可以把function 直接转换为可执行的;

和用括号括起来一样的作用,因为!+-()这些符号的运算符是最高的,所以

会把其后或者其中的当做表达式处理;故函数会自执行,而直接写function(){}()

会报错,function(){}只是匿名函数声明;而写 var b = function(){}; b()是可以的

;(function(win,doc,undefined){ 

var addHtml  = function(demo,btn){
//插件名,调用的时候直接new一下插件名就行了并传参数或者传对象
//(一般这个函数名手写字母大写比较好,构造函数嘛,其实也是函数)
//很明显我要传id名;这里传什么都可以的其实; this.div = doc.getElementById(demo);
//为什么把获取的id传给this.div呢?this的指向为调用的实例;
//我们此时姑且认为this就指向这个函数;因为这样我们之后再想获取这个
//div就可以直接用this.div了好吗;而不是在document.getElementById(。。。。) this.btn = doc.getElementById(btn);
this.Input = this.div.getElementsByTagName("input")[0];
//既然找到了div我们在找下div下面的input;当然你要不input用
//获取id的形式传参数我没有意见 this.num = 0;
//你也可以写一些其他的默认的东西;比如默认的变量啦;方便下面调用;
//这里写了什么都不会报错;只是有用没用的问题这行可以忽略 this.author = "lianxiaozhuang";
this.init();
//执行下你下面写的函数吧;你想想;如果整个插件没有执行函数;
//多不好;一堆方法function就不调用;对;这里是调用的时候最开始
//执行的函数
} //;给构造函数addHtml对象原型里添加属性(方法) addHtml.prototype = {
//给函数写方法;这里可能不止一个函数;你还记得你在全局里写一个个
//的function吗;贼乱找也不好找;把一个个函数都写到对象的属性里;
//调用函数就直接调用对象的属性; constructor:addHtml,
//构造器指向构造函数;这行其实不写没啥毛病;不过防止构造器
//指向Object的情况;你还是装逼写上吧; 因为当 addHtml.prototype = {}
//的时候;把一个字面量的对象付给了他的原型上,而{}是由Object产生;
//故此时addHtml的prototype指向了Object,所以要从新指向 init:function(){
//这里的init;你也可以写成 nimade:function(){ }都没有问题;
//就是在addHtml函数里this.init();执行下;你明白了这里的this了吧;
//整个插件里this都是只得这个函数(实例);除非你又引入了其他的函数里的
//(其他函数里的可能指向就是window了) var _self = this;
////把this保存下来防止在局部函数内部取不到(局部函数内部取得this可能
//是别的)
this.btn.onclick = function(){
var _val = _self.Input.value;
var tempdiv = doc.createElement("div");
//创建临时div存放获取input的值
tempdiv.innerHTML = _val; //console.log(tempdiv);
_self.div.appendChild(tempdiv);
_self.setColor();
//你把所有方法都写在init里绝对没问题;还是那句话;
//说好的松耦合呢;说好的不写一堆堆的function一层层乱套呢
};
},
setColor:function(){ //console.log(this.div) this.div.style.color= "red" },
/* otherFun(){ //当然你还可以扩展其他方法;这些方法之间都可以互相调用;
// 只要用this.方法名就行了;如果在取不到this比如上面的click函数中的
//this指向点击的button;只要在写var _self = this;就可以用_self
// 代替this(函数实例)了;当然_self 也可以写成别的 比如$this等自定义的 } */
}
win.addHtml = addHtml;
//把这个对象附给window底下的 名字叫addHtml的对象;要不你调用的时候
// new addHtml() 怕在window的环境下找不到; }(window,document))

调用new addHtml("demo-1","add-1");//这里是实例1调用插件的代码

new addHtml("demo-2","add-2");
//这里是实例2调用插件的代码
//是不是明白为什么要写插件了;要封装;两个相同组件即使有相同的class名在dom操作的时候
//也不会相互冲突;因为他们都new出来了个自的实例;有自己的this;有自己的一套方法了
//(其实方法都在原型里是公用的;操作各自的dom)

js写插件教程入门的更多相关文章

  1. js写插件教程深入

    原文地址:https://github.com/lianxiaozhuang/blog 转载请注明出处 js 写插件教程深入 1.介绍具有安全作用域的构造函数 function Fn(name){ t ...

  2. js写插件教程

    <!doctype html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  3. Vue.js + Webpack + ECMAScript 6 入门教程

    Vue.js学习教程 1.Vue.js——60分钟快速入门 2.Vue.js——60分钟组件快速入门(上篇) 3.Vue.js——60分钟组件快速入门(下篇) 4.Vue.js——基于$.ajax实现 ...

  4. 1,[VS入门教程] 使用Visual Studio写c语言 入门与技巧精品文~~~~下载安装篇

    Microsoft Visual Studio是微软(俗称巨硬)公司出品的强大IDE(Integrated Development Environment 集成开发环境),功能强大齐全,界面舒服之类的 ...

  5. D3.js的v5版本入门教程(第十三章)—— 饼状图

    D3.js的v5版本入门教程(第十三章) 这一章我们来绘制一个简单的饼状图,我们只绘制构成饼状图基本的元素——扇形.文字,从这一章开始,内容可能有点难理解,因为每一章都会引入比较多的难理解知识点,在这 ...

  6. D3.js的v5版本入门教程(第十二章)—— D3.js中各种精美的图形

    D3.js的v5版本入门教程(第十二章) D3中提供了各种制作常见图形的函数,在d3的v3版本中叫布局,通过d3.layout.xxx,来新建,但是到了v5,新建一个d3中基本的图形的方式变了(我也并 ...

  7. D3.js的v5版本入门教程(第十一章)——交互式操作

    D3.js的v5版本入门教程(第十一章) 与图形进行交互操作是很重要的!所谓的交互操作也就是为图形元素添加监听事件,比如说当你鼠标放在某个图形元素上面的时候,就会显示相应的文字,而当鼠标移开后,文字就 ...

  8. D3.js的v5版本入门教程(第九章)——完整的柱状图

    D3.js的v5版本入门教程(第九章) 一个完整的柱状图应该包括的元素有——矩形.文字.坐标轴,现在,我们就来一一绘制它们,这章是前面几章的综合,这一章只有少量新的知识点,它们是 d3.scaleBa ...

  9. D3.js的v5版本入门教程(第八章)—— 坐标轴

    D3.js的v5版本入门教程(第八章) D3中没有现成的坐标轴图形,需要我们自己用其他组件拼凑而成.D3中提供了坐标轴组件,使得我们在SVG中绘制一个坐标轴变得像添加一个普通元素那样简单 为了表绘制一 ...

随机推荐

  1. python之函数、参数、作用域、递归

    函数的定义 函数也就是带名字的代码块.使用关键字def来定义,指出函数名及参数,以冒号结尾. def fibs(num): result =[0,1] for i in range(num-2): r ...

  2. Linux并发与同步专题 (3) 信号量

    关键词:Semaphore.down()/up(). <Linux并发与同步专题 (1)原子操作和内存屏障> <Linux并发与同步专题 (2)spinlock> <Li ...

  3. 记录一次.Net框架Bug发现和提交过程:.Net Framework和.Net Core均受影响

    SmtpClient一处代码编写错误导致异步发送邮件时DeliveryFormat配置项无法正确工作,异步操作已经完全不受我们设置属性控制了,UTF-8内容(如中文)转不转码完全看对方邮件服务器心情! ...

  4. 面试 15:顺时针从外往里打印数字(剑指 Offer 第 20 题)

    面试 15:顺时针从外往里打印数字 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印每一个数字.例如输入: {{1,2,3}, {4,5,6}, {7,8,9}} 则依次打印数字为 1.2.3. ...

  5. Azure Load Balancer : 动态扩展

    笔者在前文<Azure Load Balancer : 支持 IPv6>中介绍了如何通过 PowerShell 脚本创建支持 IPv6 的 Load Balancer.本文我们接着介绍如何 ...

  6. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 访问记录功能改进

    当用户数据非常庞大时需要一个功能,就是统计各种账户的访问系统的情况,用户数量的各种参数需要让管理者心里有个数. 1:信息系统中有多少有效账户?可以很方便能知道具体个数,让管理者心里有个数. 2:某个公 ...

  7. 1171: lfx捧杯稳啦!

    escription Lfx在复习离散的时候突然想到了一个算法题,毕竟是lfx, 算法题如下: 他想知道这样的问题,先定义1~n中即是3的倍数,又是11的倍数的那些数的和sum, 他想知道sum有多少 ...

  8. Create a toolwindow for the VBA editor with .NET(C#).

    原始出处:http://www.cnblogs.com/Charltsing/p/VBEtoolwindow.html 最近有人问起使用C#在VBE插件中创建toolwindow的事情,由于VBE窗口 ...

  9. [2017BUAA软工助教]团队alpha得分总表

    一.累计得分 项目 介绍 采访 贡献分 功能 技术 α例会 α发布 α测试 α展示 α事后 合计 满分 10 10 10 10 10 50 10 10 150 10 280 hotcode5 10 9 ...

  10. 软件工程(FZU2015) 赛季得分榜,第10回合(alpha冲刺)

    SE_FZU目录:1 2 3 4 5 6 7 8 9 10 11 12 13 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分: 团队项目分=团队得分+个人贡献分 个人贡献分: 个人 ...