2017-06-01 90 views
6

我正在開發客戶端的表導出插件。插件工作正常。但是當我使用jshint驗證我的代碼時,它會引發錯誤,說明可能存在嚴重的違規行爲。下面是函數:javascript - jshint可能嚴格違反錯誤

function disableExport(){ 
     if(_(this).exportPlugin !== undefined){ 
      _(this).exportPlugin.setStyle('pointer-events', 'none'); 
      _(this).exportPlugin.find('.ebIcon').removeModifier('interactive','ebIcon'); 
      _(this).exportPlugin.find('.ebIcon').setModifier('disabled','','ebIcon'); 
     }else{ 
      console.log('ERROR!'); 
     } 
    } 

它說:「如果使用函數調用執行的嚴格模式功能,其‘本’值將是未定義」插件

完整的代碼可以在https://jsfiddle.net/t47L8yyr/

我該如何解決這個問題?除了使用任何其他解決方案/*jshint validthis:true*/

+0

夥計們,當OP明確表示在另一個問題中接受的答案對他無用時,我們將問題解決爲重複。讓我們重新打開它 – slezica

+0

@slezica謝謝 – Valay

+0

給它一段時間。當它被重新打開時,我會留下一個答案 – slezica

回答

5

disableExport()函數中,您引用了this。如果調用正常的功能...

disableExport() 

...在strict Javascript modethis將是不確定的。在嚴格模式之外,this通常是window對象。所以:

disableExport() // `this` will be `window` 

"use strict" 
disableExport() // `this` will be undefined 

這並不好。如果您要定位的window對象,明確地使用它:

_(window).exportPlugin(...) // reference `window`, not `this` 

如果你試圖使用this作爲參數的函數,用Function.call()Function.apply()調用它 ,這是更好的採取實際 參數,而不是使用this

function disableExport(target) { 
    if(_(target).exportPlugin !== undefined) { 
    // ... 
    } 
} 

你可以調用disableExport(window)或任何其他target。僅當處理對象的方法,定義爲 中的函數的prototype或通過ES6 class syntax時,通常 才更好地使用this

+0

感謝您的回答。你可以在https://jsfiddle.net/t47L8yyr/上給我看看。我在創建後將插件分配給'_(this).exportPlugin'。 – Valay