在 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(即不是我的代码)。

可以看到,targetundefined,所以if块没有执行。到目前为止,这是预期的。现在是奇数部分。

this._hoveredTargetnull(请参阅下面的调试器视图)。 else if 块不应该被执行,但它确实被执行了。

Debugging view of falsy "else if" being executed

我尝试用 this._hoveredTarget !== nullthis._hoveredTarget != null 等变体修复它,但当 this._hoveredTargetnull 时它仍然存在。

我以前从没见过这个。有什么想法吗?

好的,这不能仅仅因为代码中的错误而发生。一个 IF 就是一个 IF。 可能发生的情况是,您在 mouse:out 上发生了一些事件处理,该事件发生在出错的行之前,并且该事件处理程序正在删除对 this._hoverTarget.

的引用

我认为这仍然是一个错误,因为如果允许自定义代码,则必须在将变量作为对象访问之前再次检查条件。

当前版本的 fabricJS 1.7.17 有不同的代码:

this.hoveredTarget 会立即保存为参考,这样无论 hoveredTarget 发生什么情况,您都是安全的。

你也许应该升级。