apply()和call()应用与区别

apply():能继承另外一个Function对象的方法和属性,调用一个对象的一个方法,用另一个对象替换当前对象;

call():与apply()的意思一样,但是参数列表不同;

语法如下:

function.apply(thisObj[,argArray]);

function.call(thisObj[,arg1[,arg2[,arg3]]]);

B.apply(A,arguments);即A对象应用B对象的方法;

B.call(A,arg1,arg2);

相同之处:都可以用来代替另一个对象调用一个方法,讲一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象。

不同之处:传入参数不同。

/*基本用法*/
function add(a,b) {
    return a+b;
}
function sub(a,b) {
    return a-b;
}
var a1 = add.apply(sub,[4,2]);
var a2 = sub.apply(add,[4,2]);
var a3 = add.call(sub,4,2);
var a4 = sub.call(add,4,2);
console.log(a1);
console.log(a2);
console.log(a3);
console.log(a4);
/*实现继承*/
function Animal(name) {
    this.name = name;
    this.showName = function () {
        alert(name);
    }
}
function Cat(name) {
    Animal.apply(this,[name]);
}
var cat = new Cat("喵喵");
cat.showName();
/*多重继承*/
function parent1() {
    this.showSub = function (a,b) {
        alert(a-b);
    }
}
function parent2() {
    this.showAdd = function (a,b) {
        alert(a+b);
    }
}
function child() {
    parent1.apply(this);
    parent2.apply(this);
}
var b = new child();
b.showSub(3,1);
b.showAdd(3,1);

apply的其它用法:

1.Math.max可以实现数组中最大的一项,Math.min可以实现数组中最小的一项:

Math.max不支持参数为数组,但支持多个参数,所以根据apply的特点来解决;

var arr = [1,3,2,4];
var max = Math.max.apply(null,arr);
alert("max=" + max);
var min = Math.min.apply(null,arr);
alert("min=" + min);
/*在调用时第一个参数给了null,这是因为没有对象调用这个方法,只需要这个方法进行运算*/

2.Array.prototype.push可以实现两个数组的合并:

push方法没有提供push一个数组,但提供了push(param1,param2,param3),所以根据apply的特点来解决;

var arr1 = new Array("1","2","3");
var arr2 = new Array("4","5","6");
alert(Array.prototype.push.apply(arr1,arr2));

总结:一般在目标函数只需要n个参数列表,而不接受数组形式,可以通过apply的方式巧妙解决;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值