您的位置:首页 > 移动开发

call() 和 apply() 用法

2017-12-11 10:08 141 查看


 1.call()   obj1.call(obj2[,param1,param2,...])


2.apply() obj1.call(obj2[,arrArg])

   3.异同
    相同点:两个用法类似 ,用obj2对象来代替obj1,调用obj1的方法。即将obj1应用到obj2上。 复杂来讲,就是改变obj1对象的执行上下文为obj2对象的,在obj2里执行,利用obj2对象定义的属性和方法,节省代码量,减少内存。(js里一切都是对象,包括函数)

   不同点:call()可以接收任何类型的参数,而apply()只能接收数组参数

   用法:copy

function add(a,b){  

    return a+b;  

}  

function sub(c,d){  

    return c-d;  

}  

function result(){  

    this.addValue = null;  

    this.subValue = null;  

    this.showResult=function(){  

        alert(this.addValue);  

        alert(this.subValue);  

    }  

}  

var r = new result();  

r.addValue = add.call(sub,4,2); //6,将add方法应用到sub上,即sub的指针指向add方法  

r.subValue = sub.call(add,4,2); //2,用add对象替换sub对象,并调用sub对象的方法  

r.showResult(); //在js中函数也是一个Function对象,函数名即是对象引用  


4.继承特性

[javascript] view
plain copy

function add(a,b){  

    return a+b;  

}  

function sub(c,d){  

    return c-d;  

}  

function result(){  

    this.addValue = null;  

    this.subValue = null;  

    this.showResult=function(){  

        alert(this.addValue);  

        alert(this.subValue);  

    }  

}  

var r = new result();  

r.addValue = add.call(r,4,2);   //6,r继承add函数的所有特性  

r.subValue = sub.call(r,4,2);   //2,r集成sub函数的所有特性  

r.showResult();   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  call apply