gpt4 book ai didi

javascript - 对象函数 () { } 没有方法 'my method'

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:04:24 26 4
gpt4 key购买 nike

我正在使用一种方法 (searchTransportation) 进行事件回调。

exports.searchTransportation = function (items, num, UrlS) {
//...
}

exports.doHotelInsertion = function(items, num, typetransport, UrlS, callback) {
// (omitted code)


event.on("STARTWITHAIRSEARCH" + num, searchTransportation ); //!!! causes error

};

我试过了

  event.on("STARTWITHAIRSEARCH" + num, this.searchTransportation(items, num,
UrlS).bind(this));

但这是破坏代码并以 对象函数 () { } 没有方法 'searchTransportation'

我知道事件回调在全局范围内,但有没有办法调用现有方法?

-- 编辑

这有点像这个 SO 问题:Class methods as event handlers in javascript但有一个 nodejs 扭曲。执行此操作最优雅的方法是什么?

最佳答案

发生的事情是你的 callback在你的 event.on 之前被调用函数调用 this.searchTransportation.bind(...) .

所以基本上您正在丢失有效的 this 指针,因为该函数已经终止。this 指针不再指向有效对象(可能您的对象超出范围并从内存中清除)。

你有两种选择来解决这个问题:第一个是创建将存储到异步调用结束的局部变量:

exports.doHotelInsertion = function(items, num, typetransport, UrlS, callback) {

var _items = items;
var _num = num;
var _UrlS = UrlS;
var localthis = this;

event.on("STARTWITHAIRSEARCH" + num, localthis.searchTransportation(_items, _num, _UrlS));
};

第二个也是更优雅的方法是将变量作为参数绑定(bind)到您的异步调用以保留它们。

exports.doHotelInsertion = function(items, num, typetransport, UrlS, callback) {

// somestuff
var localthis = this;

event.on("STARTWITHAIRSEARCH" + num, localthis.searchTransportation(items, num, UrlS));
};

你仍然需要为此创建一个局部变量,但至少对于其他变量来说它会更整洁。

关于javascript - 对象函数 () { } 没有方法 'my method',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27822217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com