[英]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.