gpt4 book ai didi

Javascript 绑定(bind)问题

转载 作者:行者123 更新时间:2023-11-28 15:11:16 25 4
gpt4 key购买 nike

我是 JS 新手,并且无法弄清楚为什么 bind 会给我带来问题:

这是一个片段:

var MyTest = function() {
registerChannel(address, null, this._messageHandler.bind(this));
};

MyTest.prototype._messageHandler = function(msg) {
this._logToConsole(msg);
};

MyTest.prototype._close = function() {

(function(inst) {
asyncSend(address, data,
function(err, reply) {
unregisterChannel(address, inst._messageHandler.bind(inst));
}
);
})(this);
}

registerChannel 方法存储我传递的回调函数,unregisterChannel 尝试验证此回调是否存在并失败,因为“bind”复制了该方法并且未传递它们作为引用(据我所知)。

结果是unregisterChannel失败,因为找不到我传递的函数。

我该如何解决这个问题?申请\打电话?不熟悉那些...

谢谢你,我希望我的问题有意义......

最佳答案

每次调用 .bind 时,您都会获得一个新引用,因此“注册”和“取消注册”阶段将不匹配,因为您没有传递完全相同的引用。

因此每个对象都需要保留其绑定(bind)处理程序的自己的副本,例如:

var MyTest = function() {
this._handler = this._messageHandler.bind(this);
registerChannel(address, null, this._handler);
};

然后您可以将 this._handler 传递给您的 unregisterChannel 调用。

另一种方法是根本不将 _messageHandler 放在 prototype 上,并在构造函数中创建一个新实例:

var MyTest = function() {

this._messageHandler = (function(msg) {
...
}).bind(this);

registerChannel(address, null, this._messageHandler);
};

关于Javascript 绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36362361/

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