一直都知道call和apply,用的真的很少,今天想起来了,就随便说说吧
1:基本用法
看到call和apply,大家想到的应该都是一句话 改变对象执行的上下文
2:apply和call的用法
其实call和apply的用意简单来说都一样,就是改变this 的指向
这也是他们的相同点
下面看一个具体的demo
var person = {
name: 'xiao ming',
age: 18,
who: function () {
console.log( 'my name is ' + this.name + ' , ' + this.age + ' years old' );
console.log( person === this);
}
}
person.who();
name: 'xiao ming',
age: 18,
who: function () {
console.log( 'my name is ' + this.name + ' , ' + this.age + ' years old' );
console.log( person === this);
}
}
person.who();
person.who.apply({name:'123',age:15});
person.who.call({name:'123',age:15});
person.who.call({name:'123'})
这样person的指向就改变了
3:apply和call的不同
先看下apply和call 的用法
call
function.call(obj[,arg1[, arg2[, [,.argN]]]]])
apply
function.apply(obj[,argArray])
可以看出,它们里面传入的参数不同。
那到底什么时候该用apply,什么时候用call呢
根据你要传入的参数来做选择,不需要传参或者只有1个参数的时候,用call
,当要传入多个对象时,用apply
4:apply和call其他用法
function superClass () {
this.a = 1;
this.print = function () {
console.log(this.a);
}
}
function subClass () {
superClass.call(this);
this.print();
}
用call实现继承,subClass通过call实现对superClass 的继承。