我很好奇,因爲當我們在大多數示例中訪問高級函數時,總是使用call()
方法。Object.prototype.toString.call(),爲什麼在大多數示例中使用call()而不是應用?
例子:
Object.prototype.toString.call();
Array.prototype.slice.call();
這對公約或有其他原因?
我很好奇,因爲當我們在大多數示例中訪問高級函數時,總是使用call()
方法。Object.prototype.toString.call(),爲什麼在大多數示例中使用call()而不是應用?
例子:
Object.prototype.toString.call();
Array.prototype.slice.call();
這對公約或有其他原因?
基本上call()
期望參數需要以逗號分隔格式傳遞,而apply()
需要參數作爲數組。所以你看到的例子可能不需要參數作爲數組傳遞。這是選擇的問題,
一個簡單的例子:
Math.max.call(Math, 1,2,3,4,5);
//is same as
Math.max.apply(Math, [1,2,3,4,5]);
而且在某些特殊情況下this
論據call
/apply
將作爲object
傳遞和原來的參數將被忽略。像,
var x = document.querySelectorAll("div")
Array.prototype.slice.call(x);
//This will convert the nodeList to an array.
將上述樣品將訪問傳遞this
(一個nodeList
)的length
屬性和將構建一個新的數組,並將其返回。您必須閱讀slice
的算法以瞭解更多信息。內部有this is how the slice will works,我回答。
卓越的例子!謝謝。 –
兩者都是一樣的,在一個你可以pass comma separated arguments
和另一個array
。我沒有看到任何其他差異,如果在bind
中可以使用later context
的返回函數,而內部函數仍具有外部函數scope
。
.call
相當於.apply
只要您不傳遞除this
(即第一個參數)以外的參數。選擇另一個只是一個慣例。
這些示例可能不需要將參數作爲數組傳遞。 –