apply方法與call方法

  • 常常混淆這兩個方法,在此作個總結
  • 每一個函數都包含兩個非繼承而來的方法:call()方法和apply()方法。

相同點

  • 這兩個方法的做用是同樣的,即改變this的指向。

不一樣點

接收參數的方式不一樣

  • 兩個方法的第一個參數通常寫的都是函數運行的做用域(this),能夠爲空,那當前函數運行的做用域就爲window,但apply方法必須填上null,call不須要填
  • 示例:
console.log(Math.max.call(1,5,7));
console.log(Math.max.apply(null,[1,5,7]));
  • 接收的第二個參數也不一樣,apply方法的第二個參數必須是數組形式,而call方法不須要
  • 舉例:
function add(c,d){
        return this.a + this.b + c + d;
    }
    var s = {a:1, b:2};
    console.log(add.call(s,3,4)); // 1+2+3+4 = 10
    console.log(add.apply(s,[5,6])); // 1+2+5+6 = 14
相關文章
相關標籤/搜索