使用箭头函数作为观察者失败?

use*_*545 0 ember.js

看起来我不能使用箭头函数作为观察者,匿名方法工作正常.我错过了一些关键的东西,为什么背景不同?

ember.debug.js:32096 TypeError: _this3.get is not a function
    at .sessionChanged (session.js:77)
    at Object.applyStr (ember.debug.js:23331)
    at Object.sendEvent (ember.debug.js:16842)
    at ObserverSet.flush (ember.debug.js:20171)
    at endPropertyChanges (ember.debug.js:20682)
    at Object.changeProperties (ember.debug.js:20707)
    at Object.setProperties [as default] (ember.debug.js:21786)
    at exports.default._emberMetalMixin.Mixin.create.setProperties (ember.debug.js:35465)
    at invalidate (session.js:98)
    at session.js:42
Run Code Online (Sandbox Code Playgroud)

匿名功能 - 工作.

  /**
   * Session event observer.
   */
  sessionChanged: Ember.observer('user', function() {
    // Get the user value
    const user = this.get('user');

    // Get the session token
    const token = this.get('token');

    console.log(user, token);
  }),
Run Code Online (Sandbox Code Playgroud)

使用箭头功能的观察者方法 - 引发异常.

  /**
   * Session event observer.
   */
  sessionChanged: Ember.observer('user', () => {
    // Get the user value
    const user = this.get('user');

    // Get the session token
    const token = this.get('token');

    console.log(user, token);
  }),
Run Code Online (Sandbox Code Playgroud)

dyn*_*ast 5

箭头函数是ES6功能,使用Babel.js在Ember.js中进行转换.箭头函数是一种较短的表示法,它还将当前上下文隐式绑定到已定义的函数.

在您的情况下,当前上下文未定义,因为定义发生在模块内,并且模块中的顶层this在Babel ES6中未定义.(参见http://exploringjs.com/es6/ch_modules.html)

它使用匿名函数,因为ember显式绑定您的对象上下文.它不能用箭头功能,因为Babel会自动进行绑定.