2017-08-17 27 views
0

也許類似於How do I configure ESLint to allow fat arrow class methodsESLint示出了類實例屬性錯誤初始化爲箭頭功能

當類方法定義爲箭頭函數Eslint高亮錯誤「方法」沒有定義。 (無爲undef)。 簡單的例子

class abc { 
    d =() => { 
    // method body 
    } 
} 

這裏就不difined 'd'

class method is not defined

我.eslintrc配置

{ 
    "env": { 
     "browser": true, 
     "es6": true 
    }, 
    "extends": [ 
     "eslint:recommended", 
     "plugin:flowtype/recommended" 
    ], 
    "parser": "babel-eslint", 
    "parserOptions": { 
     "ecmaFeatures": { 
      "experimentalObjectRestSpread": true, 
      "jsx": true 
     }, 
     "sourceType": "module" 
    }, 
    "plugins": [ 
     "react", 
     "flowtype" 
    ], 
    "rules": { 
     "indent": [ 
      "error", 
      2 
     ], 
     "linebreak-style": [ 
      "error", 
      "unix" 
     ], 
     "quotes": [ 
      "error", 
      "single" 
     ], 
     "semi": [ 
      "error", 
      "always" 
     ] 
    } 
} 

.babelrc

{ 
    "presets": ["react", "es2015", "stage-1", "flow"] 
} 

也許我需要聲明一些規則?

+1

ES6類沒有實例變量,這就是'd'在這裏。 – 2017-08-17 03:47:07

+0

箭頭函數在'class'中沒有意義 - 就像設置'Something.prototype.somefunction =()=> {}'沒有意義 –

+0

@torazaburo - 'class'語法不提供實例變量,但是如果在方法中創建的話,結果類可以擁有它們。 (正在選擇措辭。)(所以我的措辭可能也是錯誤的。) – nnnnnn

回答

1

正如MinusFour answer所提到的,我嘗試通過命令行運行eslint,但沒有看到該錯誤。

我的編輯器配置錯誤。 (原子的linter-eslint包中的node_modules文件夾路徑錯誤)。在我刪除這個路徑並重新啓動編輯器後,一切正常。

2

當在class定義,一個函數使用不同的語法:

class abc { 
    d() { 
    // method body 
    } 
} 

Javascript Classes

+1

當我們使用Babel transpiler時,我們可以將箭頭函數設置爲方法並獲得一些利潤(例如,在創建基於React.Component的類時,不需要綁定這個)。 您可以在這裏看到示例:[處理事件示例](https://facebook.github.io/react/docs/handling-events.html) – n06rin

+0

很高興知道,感謝您的信息!我不知道這個實驗性功能,肯定會有用 –

0

This is something that hasn't made its way into Javascript yet。它可以作爲帶有babel的實驗性插件使用,因此您需要更改默認的eslint解析器,並使用babel-eslint

+0

是的,你是對的。在.eslint配置文件中,我將解析器設置爲babel-eslint(您可以在問題中看到它)。但它沒有幫助。 – n06rin

+0

@ n06rin,我剛剛注意到了。它對我來說工作得很好,你正在使用哪個版本的eslint和babel-eslint? – MinusFour

+0

我使用[email protected]和[email protected] – n06rin