javascript知识整理
2015-10-12 16:47
525 查看
1.原生cookie操作
2.查看js对象函数
3.js多重继承
4.利用apply实现多重继承
5.使用apply进行数组参数的函数优化
Math.max后面可以接任意个参数,最后返回所有参数中的最大值。
比如
alert(Math.max(5,8)) //8
alert(Math.max(5,7,9,3,1,6)) //9
但是在很多情况下,我们需要找出数组中最大的元素。
var arr=[5,7,9,1]
alert(Math.max(arr)) // 这样却是不行的。一定要这样写
function getMax(arr){
var arrLen=arr.length;
for(var i=0,ret=arr[0];i<arrLen;i++){
ret=Math.max(ret,arr[i]);
}
return ret;
}
用 apply呢,看代码:
function getMax2(arr){
return Math.max.apply(null,arr);
}
/** * cookie操作工具. * 使用方法:保存值:CookieTool('name','1',{expires: 7}) //表示保存一个cookie值为1,键值为name,失效时间7天以后 * 取值:CookieTool('name') //返回1 * @param {} name * @param {} value * @param {} options * @return {} */ CookieTool = function(name, value, options) { if (typeof value != 'undefined') { options = options || {}; if (value === null) { value = ''; options.expires = -1; } var expires = ''; if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) { var date; if (typeof options.expires == 'number') { date = new Date(); date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000)); } else { date = options.expires; } expires = '; expires=' + date.toUTCString(); } var path = options.path ? '; path=' + (options.path) : ''; var domain = options.domain ? '; domain=' + (options.domain) : ''; var secure = options.secure ? '; secure' : ''; document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join(''); } else { var cookieValue = null; if (document.cookie && document.cookie != '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = trim(cookies[i]); if (cookie.substring(0, name.length + 1) == (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } };
2.查看js对象函数
/** * 用来查看一个对象的属性 */ function debugObjectInfo(obj){ traceObject(obj); function traceObject(obj){ var str = ''; if(obj.tagName&&obj.name&&obj.id) str="<table border='1' width='100%'><tr><td colspan='2' bgcolor='#ffff99'>traceObject tag: <"+obj.tagName+"> name = \""+obj.name+"\" id = \""+obj.id+"\" </td></tr>"; else{ str="<table border='1' width='100%'>"; } var key=[]; for(var i in obj){ key.push(i); } key.sort(); for(var i=0;i<key.length;i++){ var v= new String(obj[key[i]]).replace(/</g,"<").replace(/>/g,">"); str+="<tr><td valign='top'>"+key[i]+"</td><td>"+v+"</td></tr>"; } str=str+"</table>"; writeMsg(str); } function trace(v){ var str="<table border='1' width='100%'><tr><td bgcolor='#ffff99'>"; str+=String(v).replace(/</g,"<").replace(/>/g,">"); str+="</td></tr></table>"; writeMsg(str); } function writeMsg(s){ traceWin=window.open("","traceWindow","height=600, width=800,scrollbars=yes"); traceWin.document.write(s); } }
3.js多重继承
function Class10() { this.showSub = function(a,b) { alert(a-b); } } function Class11() { this.showAdd = function(a,b) { alert(a+b); } } function Class2() { Class10.call(this); Class11.call(this); }
4.利用apply实现多重继承
function Person(name,age){ this.name=name; this.age=age; this.sayhello=function(){alert("hello")}; } function Print(){ this.funcName="Print"; this.show=function(){ var msg=[]; for(var key in this){ if(typeof(this[key])!="function"){ msg.push([key,":",this[key]].join("")); } } alert(msg.join(" ")); }; } function Student(name,age,grade,school){ Person.apply(this,arguments); Print.apply(this,arguments); this.grade=grade; this.school=school; } var p1=new Person("jake",10); p1.sayhello(); var s1=new Student("tom",13,6,"CKXY"); s1.show(); s1.sayhello(); alert(s1.funcName);
5.使用apply进行数组参数的函数优化
Math.max后面可以接任意个参数,最后返回所有参数中的最大值。
比如
alert(Math.max(5,8)) //8
alert(Math.max(5,7,9,3,1,6)) //9
但是在很多情况下,我们需要找出数组中最大的元素。
var arr=[5,7,9,1]
alert(Math.max(arr)) // 这样却是不行的。一定要这样写
function getMax(arr){
var arrLen=arr.length;
for(var i=0,ret=arr[0];i<arrLen;i++){
ret=Math.max(ret,arr[i]);
}
return ret;
}
用 apply呢,看代码:
function getMax2(arr){
return Math.max.apply(null,arr);
}
再比如数组的push方法。 var arr1=[1,3,4]; var arr2=[3,4,5]; 如果我们要把 arr2展开,然后一个一个追加到arr1中去,最后让arr1=[1,3,4,3,4,5] arr1.push(arr2)显然是不行的。 因为这样做会得到[1,3,4,[3,4,5]] 我们只能用一个循环去一个一个的push(当然也可以用arr1.concat(arr2),但是concat方法并不改变arr1本身) var arrLen=arr2.length for(var i=0;i<arrLen;i++){ arr1.push(arr2[i]); } 使用apply: Array.prototype.push.apply(arr1,arr2)
相关文章推荐
- jstat
- LimeJS指南7
- LimeJS指南6
- Json格式获取里面某个字段的数据获取天气接口
- Hammer.js
- Hibernate List 转 Json 报错
- JSP动态include与静态include(2015年10月12日)
- 二、JavaScript语言--JS基础--JavaScript进阶篇--函数
- JS自写带描述标签云
- jstat详解
- 利用jstl:functions截取字符串
- Ajax跨域请求解决方案——jsonp
- js日历表
- js控制滚动条平滑滚动到制定位置
- JavaScript获取Url
- js正则表达式验证
- 编写高性能Javascript代码的N条建议
- js数值计算的处理,防止精度误差
- OC与JS的交互
- JS中setTimeout的作用域以及this的指向问题