将通用javascript函数作为回调传递不会';不执行

将通用javascript函数作为回调传递不会';不执行,javascript,callback,prototype,Javascript,Callback,Prototype,我有一个函数,它读取http流,组合数据事件,并将响应作为连接字符串传递。如果我以c=>body.push(c)的形式将“data”事件传递给函数,它将按预期工作。但是,如果我传递它body.push,则内容永远不会添加到数组中通用原型不能作为参数传递有什么原因吗? 以下是我的功能: const requestPromise = function(resolve, reject) { return (response) => { let body = [];

我有一个函数,它读取http流,组合数据事件,并将响应作为连接字符串传递。如果我以
c=>body.push(c)
的形式将“data”事件传递给函数,它将按预期工作。但是,如果我传递它
body.push
,则内容永远不会添加到数组中通用原型不能作为参数传递有什么原因吗?

以下是我的功能:

const requestPromise = function(resolve, reject) {
    return (response) => {
        let body = [];

        response.on('data', body.push);
        response.on('end', () => {
            body = body.join('');
            if (body == "") {
                reject("Body is empty");
            } else {
                resolve(body);
            }
        });
    };
};

push
在这种情况下,is不再具有
body
的调用上下文,因此您使用箭头函数的想法是正确的。另一种可能的方法是显式使用该方法:

response.on('data', body.push.bind(body));

不,没有理由原型函数“不能”用作高阶函数(即用作函数的参数)。“不执行”的结论是错误的,因为它确实执行了,只是没有预期的上下文。不过,我建议大家阅读一下函数中如何解析
这个
——因为这(哈!)对于理解ECMAScript的工作原理至关重要。一旦理解了这一点,就没有(上面)问题可以回答了;尤其是因为我从未使用过
这个
关键字。