2017-09-05 50 views
0

美好的一天,我正在使用fabricjs,它適合我。 但是我最近遇到了JavaScript無法解釋的東西,而且我只在fabricjs(跨所有瀏覽器)上檢測到。在fabricjs中執行的Falsy代碼_fireOverOutEvents

注意:我正在使用fabricjs1.7.11

它發生在mouse:out事件。 它的唯一副作用是對臃腫的瀏覽器控制檯:

Uncaught TypeError: Cannot read property 'fire' of null at klass._fireOverOutEvents (fabric.js:9717) ...

它是這樣的:

screenshot, falsy yet executed

這是香草fabric.js(即不是我的代碼)。

如您所見,targetundefined,因此if塊未執行。到目前爲止,這是預期的。現在是奇怪的部分。

this._hoveredTargetnull(參見下面的調試器視圖)。 else if塊不應該執行,但它是。

Debugging view of falsy "else if" being executed

我試圖與像this._hoveredTarget !== nullthis._hoveredTarget != null變種修復它,但它仍然去那裏的時候this._hoveredTargetnull

我從來沒有見過這個。任何想法?

+0

你能否提供'this._hoveredTarget'爲空的證明? – clabe45

+0

檢查之前如果,'this._hoveredTarget = target',那麼在執行之後 – Durga

+0

我在問題發生時添加了代碼的調試器視圖。 – RKMNGRT

回答

0

好吧,這不可能發生只是因爲在代碼中的錯誤。 IF是IF。 可能發生的情況是,您在mouse:out之前發生了一些事件處理,該事件正在發生錯誤並且該事件處理程序正在刪除對this._hoverTarget的引用。

在我看來,這仍是一個錯誤,因爲如果允許自定義代碼,那麼在訪問作爲對象的變量之前必須再次檢查條件。

當前fabricJS 1.7.17版本都有不同的代碼來代替:

enter image description here

this.hoveredTarget保存爲參考立刻讓無論它發生在你hoveredTarget是安全的。

你應該升級也許。