一直都知道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 的繼承。