javascript - 在javascript中传递array.push函数
问题描述
我在 javascript 中传递 array.push 函数时遇到问题,代码如下:
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 的类型是一个函数。不能像上面的 console.log 那样直接传递函数,这很好用吗?
解决方案
push
是一种方法array
。调用时,它this
用作对正在调用它的对象的引用。如果您像普通函数一样传递它,您将丢失该引用,该方法将使用this
调用时定义的值(内部addToArray
,this
可能是document.window
),因此将失败。
为了传递一个方法,您需要将它绑定到您希望它操作的对象,在本例中为array
. 这适用于 JavaScript 中的任何对象方法。Function.prototype.bind()
正是为了这个目的而存在:它将一个函数(在这种情况下是你的方法)“绑定”到一个给定的值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);
}
推荐阅读
- python - 按升序合并 3 个列表
- javascript - 在 javascript 中创建的表格无法正确显示数据表
- numpy - 用于分类的 2D 数据点的优度度量
- spring - 当我删除弹簧批处理数据时:在封闭的结果集中不允许操作
- javascript - Contenteditable div - 按钮点击事件与其他元素点击事件有何不同?
- java - 如何从相邻文本中获取文本颜色
- java - 如果使用 InputStream 来自 PIPE 的输入结束,如何使(Java)程序自动结束
- java - 如何对 char 进行 bean 验证?
- c - vscode中的c代码没有出现问题
- python - Numpy int64() 函数参数?