在 fabricjs _fireOverOutEvents 中执行的虚假代码
Falsy code executed in fabricjs _fireOverOutEvents
你好,我正在使用 fabricjs
,它对我来说效果很好。
然而,我最近确实遇到了一件我无法解释的 JavaScript 事情,而且我只在 fabricjs
上检测到(跨所有浏览器)。
注意:我正在使用 fabricjs
中的 1.7.11
。
它发生在 mouse:out
事件上。
唯一的副作用是使浏览器控制台膨胀:
Uncaught TypeError: Cannot read property 'fire' of null
at klass._fireOverOutEvents (fabric.js:9717)
...
它是这样的:
这是原版 fabric.js
(即不是我的代码)。
可以看到,target
是undefined
,所以if
块没有执行。到目前为止,这是预期的。现在是奇数部分。
this._hoveredTarget
是 null
(请参阅下面的调试器视图)。
else if
块不应该被执行,但它确实被执行了。
Debugging view of falsy "else if" being executed
我尝试用 this._hoveredTarget !== null
和 this._hoveredTarget != null
等变体修复它,但当 this._hoveredTarget
为 null
时它仍然存在。
我以前从没见过这个。有什么想法吗?
好的,这不能仅仅因为代码中的错误而发生。一个 IF 就是一个 IF。
可能发生的情况是,您在 mouse:out
上发生了一些事件处理,该事件发生在出错的行之前,并且该事件处理程序正在删除对 this._hoverTarget
.
的引用
我认为这仍然是一个错误,因为如果允许自定义代码,则必须在将变量作为对象访问之前再次检查条件。
当前版本的 fabricJS 1.7.17 有不同的代码:
this.hoveredTarget 会立即保存为参考,这样无论 hoveredTarget 发生什么情况,您都是安全的。
你也许应该升级。
你好,我正在使用 fabricjs
,它对我来说效果很好。
然而,我最近确实遇到了一件我无法解释的 JavaScript 事情,而且我只在 fabricjs
上检测到(跨所有浏览器)。
注意:我正在使用 fabricjs
中的 1.7.11
。
它发生在 mouse:out
事件上。
唯一的副作用是使浏览器控制台膨胀:
Uncaught TypeError: Cannot read property 'fire' of null at klass._fireOverOutEvents (fabric.js:9717) ...
它是这样的:
这是原版 fabric.js
(即不是我的代码)。
可以看到,target
是undefined
,所以if
块没有执行。到目前为止,这是预期的。现在是奇数部分。
this._hoveredTarget
是 null
(请参阅下面的调试器视图)。
else if
块不应该被执行,但它确实被执行了。
Debugging view of falsy "else if" being executed
我尝试用 this._hoveredTarget !== null
和 this._hoveredTarget != null
等变体修复它,但当 this._hoveredTarget
为 null
时它仍然存在。
我以前从没见过这个。有什么想法吗?
好的,这不能仅仅因为代码中的错误而发生。一个 IF 就是一个 IF。
可能发生的情况是,您在 mouse:out
上发生了一些事件处理,该事件发生在出错的行之前,并且该事件处理程序正在删除对 this._hoverTarget
.
我认为这仍然是一个错误,因为如果允许自定义代码,则必须在将变量作为对象访问之前再次检查条件。
当前版本的 fabricJS 1.7.17 有不同的代码:
this.hoveredTarget 会立即保存为参考,这样无论 hoveredTarget 发生什么情况,您都是安全的。
你也许应该升级。