你好,我正在使用fabricjs,它对我来说很好。然而,我最近遇到了一件我无法解释的JavaScript事件,而且我只在fabricjs上(在所有浏览器上)检测到。
注意:我使用的是1.7.11 of fabricjs。
它发生在mouse:out事件上。它唯一的副作用是在浏览器控制台上膨胀:
未登录的TypeError:不能读取属性‘火’的空在klass._fireOverOutEvents (fabric.js:9717) .
事情是这样的:

这是普通的fabric.js (即不是我的代码)。
如您所见,target是undefined,因此不执行if块。到目前为止,这是意料之中的。现在是奇怪的部分。
this._hoveredTarget是null (参见下面的调试器视图)。不应该执行else if块,但它确实执行了。
我试图用像this._hoveredTarget !== null和this._hoveredTarget != null这样的变体来修复它,但是当this._hoveredTarget是null时,它仍然在那里。
我以前从没见过这个。有什么想法吗?
发布于 2017-09-08 09:37:55
好的,这不可能仅仅因为代码中的一个bug而发生。如果是假想。可能发生的情况是,您在mouse:out上有一些事件处理,它发生在正在出错的行之前,而该事件处理程序正在删除对this._hoverTarget的引用。
在我看来,这仍然是一个错误,因为如果允许使用自定义代码,则在将变量作为对象访问之前,必须再次检查条件。
当前版本的fabricJS 1.7.17有不同的代码:

this.hoveredTarget立即保存为引用,以便无论发生在hoveredTarget上的情况如何,您都是安全的。
也许你应该升级一下。
https://stackoverflow.com/questions/46064664
复制相似问题