Function.prototype.call.apply作用詳解

螞蟻小編發表於2018-07-17

關於call()和apply()基本用法可以參閱如下兩篇文章:

(1).call方法參閱JavaScript call()一章節。

(2).apply方法參閱JavaScript apply()一章節。

網上看到一段用法比較奇怪的程式碼,程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
Function.prototype.apply.call(Math.floor, undefined, [1.75])

重新進行一下分組會更清晰:

[JavaScript] 純文字檢視 複製程式碼
(Function.prototype.apply).call(Math.floor, undefined, [1.75])

任何函式都是Function類的物件例項,所以Math.floor方法物件具有apply方法。

所以上面的程式碼可以修改等價於如下程式碼:

[JavaScript] 純文字檢視 複製程式碼
Math.floor.apply(undefined, [1.75])

上面的程式碼就很好理解了,就是一個普通的apply方法的應用。

即便是Math.floor物件沒有apply方法,也是會轉變為上面的格式,這就是call方法語法規定。

再來看一段程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var num=Function.prototype.apply.call(function (b) { return this.a + b }, {a:2},[1.75])
console.log(num);

相關文章