【问题标题】:Falsy code executed in fabricjs _fireOverOutEvents在 fabricjs _fireOverOutEvents 中执行的虚假代码
【发布时间】:2018-02-14 07:43:14
【问题描述】:

您好,我正在使用fabricjs,它对我很有效。 然而,我最近确实遇到了一个我无法解释的 JavaScript 问题,而且我只在 fabricjs 上检测到(在所有浏览器中)。

注意:我使用的是1.7.11fabricjs

它发生在mouse:out 事件上。 唯一的副作用是使浏览器控制台膨胀:

未捕获的类型错误:无法读取 null 的属性“火” 在 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 时它仍然存在。

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

【问题讨论】:

  • 你能证明this._hoveredTarget 为空吗?
  • 在 else if 之前检查,this._hoveredTarget = target,在 else if 执行之后检查
  • 我在出现问题时添加了代码的调试器视图。
  • 你必须在 canvas.on('mouse:out') 中有一些代码正在杀死 canvas._hoveredTarget。

标签: javascript fabricjs mouseout


【解决方案1】:

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

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

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

this.hoveredTarget 会立即保存为参考,因此无论发生在 hoveredTarget 上的情况如何,您都是安全的。

也许你应该升级。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多