笔记:call()与apply()的作用

call与apply的作用是明显的,但一直对其定义“动态改变某个类的某个方法的运行环境”了解不深,所以记个笔记归纳一下。

含义:apply:调用一个对象的一个方法,用另一个对象替换当前对象,例:B.apply(A,arguments);

       call:应用一个对象的一个方法,用另一个对象替换当前对象,例:B.call(A,args1,args2);

相同点:方法的含义是一样的,即方法功能是一样的;

              第一个参数的作用是一样的。

不同点:两者传入的列表形式不一样 

              call可以传入多个参数;

            apply只能传入两个参数,以数组形式传入。

//call方法
function.call(thisObj[, arg1[, arg2[, [,...argN]]]]);

//apply方法
function.apply(thisObj[, argArray]);
示例:
//代码比较
function add(a, b){
    alert(a + b);
}
function index(a, b){
   //用call方式借用print,参数显式打散传递
   print.call(this, a, b);
   //用apply方式借用print, 参数作为一个数组传递,
   //这里直接用JavaScript方法内本身有的arguments数组
   print.apply(this, arguments);
   //或者封装成数组
   print.apply(this, [a, b]);
}

存在的意义(以call为例):

基本用法:

//基本用法

function add(a,b){
    alert(a+b);
}

function sub(a,b){
    alert(a-b);
}

add.call(sub,3,1);

//add替换sub,add.call(sub,3,1) == add(3,1);

继承:

//继承

function Animal(name){
    this.name = name;
    this.showName = function(){
        alert(this.naem);
    }
}

function Cat(name){
    Animal.call(this.name);
}

var cat = new Cat("Black Cat");
cat.showName();

//cat使用Animal的方法

多重继承:

//多重继承

function class1(){
    this.showSub = function(a,b){
        alert(a-b);
    }
}

function class2(){
    this.showAdd = function(a,b){
        alert(a+b);
    }
}

function class12(){
    class1.call(this);
    class2.call(this);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值