簡體   English   中英

傳遞一個array.push function in javascript

[英]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 那樣直接傳遞函數,這很好用嗎?

pusharray的一種方法。 調用時,它使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM