封装函数与调用
来源:互联网 发布:房子短租软件 编辑:程序博客网 时间:2024/06/05 08:22
js中class多种函数的封装方法
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>关于class的多种函数封装</title><style>body{ margin: 0;}li{ height: 20px;}</style></head><body><div class="box" id="box"> <ul class="list"> <li class="in abc ab "></li> <li class="in ac b "></li> <li class="in a "></li> <li class="in acb "></li> <li class="in ba "></li> <li class="abc"></li> </ul></div><script>//数组的indexOf方法封装function indexOf(arr,value,start){ //如果不设置start,则默认start为0 if(arguments.length == 2){ start = 0; } //如果数组中存在indexOf方法,则用原生的indexOf方法 if(arr.indexOf){ return arr.indexOf(value,start); } for( var i = 0; i < arr.length; i++){ if(arr[i] === value){ return i; } } return -1;}//数组去重方法封装function noRepeat(arr){ var result = []; for( var i = 0; i < arr.length; i++){ if(indexOf(result,arr[i]) == -1){ result.push(arr[i]); } } return result;}//inArray方法封装function inArray(arr,value){ for(var i = 0; i < arr.length; i++){ if(arr[i] === value){ return true; } } return false;}//去除首尾空格函数封装function trim(arr){ var result = arr.replace(/^\s+|\s+$/g,''); return result;}//getElementsByClassName函数封装function getElementsByClassName(parentObj,classStr){ var result = []; var objs = parentObj.getElementsByTagName('*'); //如果classStr用空格分隔,则表示class必须同时满足才有效 var targetArr1 = noRepeat(trim(classStr).split(/\s+/)); //如果classStr用逗号分隔,则表示class只要有一个满足就有效 var targetArr2 = noRepeat(trim(classStr).split(/\s*,\s*/)); if(classStr.indexOf(',') == -1 ){ //用空格分隔或者只有一个class label: for(var i = 0; i < objs.length; i++){ var arr = noRepeat(trim(objs[i].className).split(/\s+/)); for( var j = 0; j < targetArr1.length; j++){ if(!inArray(arr,targetArr1[j])){ continue label; } } result.push(objs[i]); } return result; }else{ //用逗号分隔 label: for(var i = 0; i < objs.length; i++){ var arr = noRepeat(trim(objs[i].className).split(/\s+/)); for( var j = 0; j < targetArr2.length; j++){ if(inArray(arr,targetArr2[j])){ result.push(objs[i]); continue label; } } } return result; }} //addclass函数封装function addClass(obj,classStr){ var array = noRepeat(trim(obj.className).split('\s+')); if(!inArray(array,classStr)){ array.push(classStr); } obj.className = array.join(' '); return obj;}//removeclass函数封装function removeClass(obj,classStr){ var array = noRepeat(trim(obj.className).split('\s+')); var index = indexOf(array,classStr); if(index != -1){ classStr.splice(index,1); obj.className = classStr.join(' '); } return obj;}//toggleClass函数封装function toggleClass(obj,classStr){ var array = noRepeat(trim(obj.className).split('\s+')); if(inArray(array,classStr)){ removeClass(obj,classStr); }else{ addClass(obj,classStr); }}</script></body></html>
js函数调用的四种方法
js的函数调用会免费奉送两个而外的参数就是 this 和 arguments 。arguments是参数组,他并不是一个真实的数组,但是可以使用.length方法获得长度。
书上有说4中调用方式:
- 方法调用模式
- 函数调用模式
- 构造器调用模式
- apply调用模式
下面我们来看看一些实例更好理解。
1:方法调用模式。
请注意this此时指向myobject。
/*方法调用模式*/ var myobject={ value:0, inc:function(){ alert(this.value) } } myobject.inc()
2:函数调用模式
请注意this此时指向window
/*函数调用模式*/ var add=function(a,b){ alert(this)//this被绑顶到window return a+b; } var sum=add(3,4); alert(sum)
3:构造器调用模式
javascript语言精粹一书建议摒弃这中方式。因为有更好的方式。这里先不介绍。下次发表博文的时候贴出来。
会在这里加一个连接。
/*构造器调用模式 摒弃*/ var quo=function(string){ this.status=string; } quo.prototype.get_status=function(){ return this.status; } var qq=new quo("aaa"); alert(qq.get_status());
4:apply调用模式
==我们可以来看一个更有用的apply实例。看最下面的代码。
/*apply*/ //注意使用了上面的sum函数 //与myobject //这中调用方式的优点在于可以指向this指向的对象。 //apply的第一个参数就是this指针要指向的对象 var arr=[10,20]; var sum=add.apply(myobject,arr); alert(sum);
看这个apply真正应用。bind这是一个绑定时间的函数
var bind=function(object,type,fn){ if(object.attachEvent){//IE浏览器 object.attachEvent("on"+type,(function(){ return function(event){ window.event.cancelBubble=true;//停止时间冒泡 object.attachEvent=[fn.apply(object)];//----这里我要讲的是这里 //在IE里用attachEvent添加一个时间绑定以后。 //this的指向不是到object对象本身所以。我们绑定的function里的this.id是无法正常工作的。 //但是如果我们用fn.apply(object) //这里可以看出我们是把apply的第一个对象也就是this的指向变更给了object所以this.id就变成了 //object.id 可以正常工作了。 } })(object),false); }else if(object.addEventListener){//其他浏览器 object.addEventListener(type,function(event){ event.stopPropagation();//停止时间冒泡 fn.apply(this) }); } } bind(document.getElementById("aaa"),"click",function(){alert(this.id)});
我喜欢的
<!DOCTYPE html><html><head><meta charset="UTF-8"><title></title><style> body{ margin: 0; } .box{width: 400px;height: 200px;margin: 200px auto;} li{ float: left;margin-left: 10px; height: 20px; width: 50px; background: green; list-style: none;} </style></head><body><botton id="aa">点击</botton><div class="box" id="box"> <ul class="list"> <li>11</li> <li>22</li> <li33</li> <li>44</li> <li>55</li> <li>66</li> </ul> </div> <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script><script> var myOpinion = myOpinion || {}; myOpinion.prototype={ init:function(obj,i){ alert(obj+'hello'); }, closeWindow:function(obj,d){ obj.click(function(){ d.hide(); }); } } $(function(){ var my = myOpinion.prototype; my.init($("#box"),$(".list")); my.closeWindow($("#aa"),$(".list li")); }); </script></body></html>
这里写的也不错:http://blog.csdn.net/xi_2130/article/details/50276025#comments
0 0
- 封装函数与调用
- Ajax函数封装与调用
- dll导出函数调用封装
- vba调用javascript函数封装
- jquery ajax调用函数封装
- js自调用匿名函数与内部实例化封装插件
- fortran中调用C封装的函数
- python数据库函数的封装调用
- DLL函数封装及调用实例
- Javascript 匿名函数与封装
- Java 封装与构造函数
- 面向对象之类的封装与调用
- JavaScript的封装与链式调用
- 堆栈与函数调用
- 堆栈与函数调用
- 堆栈与函数调用
- 堆栈与函数调用
- 堆栈与函数调用
- fastjson、gson、jackson序列化和反序列化性能对比
- 快递查询API接口对接方法
- QTcpSocket 在子线程执行测试笔记
- FEP: 测试 lineage, 获得 CPU, MEMORY 统计信息
- 【TensorBoard】运行TensorBoard出现的错误汇总及相关的解决方案
- 封装函数与调用
- oracle_sql_检查未备份就被删除的归档日志
- Android防止button短时间内多次被点击(具体间隔时间可自由选取)
- Android实现轮播图
- Sublime Text 3 应用技巧和诀窍
- 表单校验总结
- android.media.MediaCodec
- Java AES512加密算法
- jQuery的remove()和empty()的区别