在fabricjs _fireOverOutEvents中执行的伪代码

时间:2017-09-05 23:29:58

标签: javascript fabricjs mouseout

美好的一天,我正在使用fabricjs,这对我很有用。 但是我最近遇到了一个我无法解释的JavaScript,而且我只在fabricjs上检测到(在所有浏览器中)。

注意:我使用1.7.11的{​​{1}}。

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

  

未捕获的TypeError:无法读取null的属性'fire'       在klass._fireOverOutEvents(fabric.js:9717)       ...

它是这样的:

screenshot, falsy yet executed

这是香草mouse:out(即不是我的代码)。

如您所见,fabric.jstarget,因此undefined块未执行。到目前为止,这是预期的。现在是奇怪的部分。

ifthis._hoveredTarget(请参阅下面的调试器视图)。 不应该执行null块,但它是。

Debugging view of falsy "else if" being executed

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

enter image description here

this.hoveredTarget立即保存为引用,这样无论它发生在hoveredTarget上,你都是安全的。

你应该升级。