您的位置:首页 > Web前端 > JavaScript

javascript知识整理

2015-10-12 16:47 525 查看
1.原生cookie操作

/**
* 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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: