[英]Passing an array.push function in javascript
我在 javascript 中傳遞 array.push function 時遇到問題,代碼如下:
const array = []; addToArray("works", (e) => array.push(e)); addToArray("notWorks", array.push); doConsoleLog("hello", console.log); function addToArray(element, pushFn) { pushFn(element); } function doConsoleLog(message, log) { log(message); }
只是好奇 addToArray 的第一次調用是如何工作的,但第二個原因是TypeError: Cannot convert undefined or null to object
。 這怎么可能? array.push 的類型是 function。 不能像上面的 console.log 那樣直接傳遞函數,這很好用嗎?
push
是array
的一種方法。 調用時,它使用this
作為對正在調用它的 object 的引用。 如果您像普通的 function 一樣傳遞它,您將丟失該引用,該方法將使用調用時定義的this
的值(在addToArray
內, this
可能是document.window
),因此會失敗。
為了傳遞一個方法,您需要將它綁定到您希望它操作的 object,在本例中為array
。 這適用於 JavaScript 中的任何 object 方法。 Function.prototype.bind()
正是為此目的而存在:它將 function (在本例中為您的方法)“綁定”到this
的給定值,以便正常工作。
const array = [];
addToArray("now it works", array.push.bind(array));
// or
addToArray("now it works", Array.prototype.push.bind(array));
function addToArray(element, pushFn) {
pushFn(element);
}
一旦你像在第二種情況下一樣通過 function ,它會立即自行執行,並且array.push並不真正意味着什么。
稍后應在外部 function 中執行回調 function。
與第二個示例不同,在第一個示例中,您不會立即執行 function,而是僅在外部 function 內部調用它時執行。
你的代碼有很多錯誤。 這段代碼到底應該做什么? 如果要在數組中推送新項目,請使用擴展運算符
const array = [...[], "works", "notWorks"]
const array = [];
addToArray("works", (e) => array.push(e));
addToArray("notWorks", array.push);
doConsoleLog("hello", console.log);
function addToArray(element, pushFn) {
pushFn(element); //function must return something
}
function doConsoleLog(message, log) {
log(message); //function must return something
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.