绑定的Javascript问题
Javascript problems with bind
我是JS的新手,在弄清楚绑定为什么会给我带来问题时遇到了问题:
以下是一个片段:
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
时,都会得到一个新的引用,因此"注册"answers"注销"阶段将不匹配,因为您没有传递完全相同的引用。
因此,每个对象都需要保留其绑定处理程序的自己的副本,例如:
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)
- 登录后重定向,缓存页面问题-Javascript
- 在我的网站上创建一个在1-10之间不断变化的数字时遇到了问题.Javascript
- 浮点数字问题JavaScript
- 局部全局变量问题 - JavaScript
- 内容滑块问题 javascript
- 多个脚本导致链接问题?Javascript、CSS、HTML、Jquery
- 基本范围问题(javascript和node)
- 表单验证问题(Javascript)
- 表杂乱无章的问题.Javascript HTML5.
- 我的代码有什么问题.JavaScript幻灯片
- 这段代码有什么问题?(JavaScript)
- 浏览器和移动设备的视差背景问题(javascript/jquery)
- Mozilla中的setInterval()问题(Javascript函数)
- While循环问题-JavaScript-jQuery.Clone()
- 检查密码匹配问题(JavaScript)
- 抓取选中单选按钮的问题- JavaScript
- 基于下拉选择禁用文本字段的问题(JavaScript)
- 比较日期问题- javascript
- 浏览器兼容性问题Javascript