call和apply用法
阿新 • • 發佈:2018-11-05
一直都知道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();
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 的繼承。
本文參考:https://www.jianshu.com/p/131ce0390cf8