繁体   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