1. 程式人生 > >call和apply用法

call和apply用法

一直都知道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.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 的繼承。
本文參考:https://www.jianshu.com/p/131ce0390cf8