类型错误:代理上的“设置”:陷阱返回错误的属性

Al *_*een 8 javascript node.js ecmascript-6 es6-class

我将代码从 es5 类原型表示更改为 es6 类表示。但我收到错误

这是迁移到 es6 之前和之后的代码

ES5语法

function RoutingScreen (context) {
  Object.assign(this, {route} = context)
}

RoutingScreen.prototype.onEnter = function(state) {
  state.scaning = false
  state.status = 'Scan to continue'
  curState = states.init
};
Run Code Online (Sandbox Code Playgroud)

ES6语法

class RoutingScreen{
  constructor(context){
    Object.assign(this, {route}= context)
  }

onEnter(state){
    state.scaning = false
    state.status = 'Scan to continue'
    curState = states.init
  }
}
Run Code Online (Sandbox Code Playgroud)

我收到这样的错误

类型错误:代理上的“设置”:陷阱为属性“扫描”返回错误

但es5代码工作正常。

我使用的是节点版本8.1

我不知道我在这里做错了什么。

这是我调用这些方法的地方

    function setRoute (newRoute) {
        var r = currentRoute()
        console.log('changeRoute from ' + (r?r.route:'""') + ' to ' + newRoute)
        if (r && r.route == newRoute) {
          return true
        }
        if (!r || !r.onExit || r.onExit(state) !== false) {
          stateStack.pop()
        }
        r = newRoute ? pushRoute(newRoute) : currentRoute()
        state.session.route = r.route


        return !r.onEnter || r.onEnter(state)

  }
Run Code Online (Sandbox Code Playgroud)

Mar*_*Cox 12

当我尝试编写 set 方法时,我在阅读 JavaScript Ninja 书的使用代理对象的示例中遇到了同样的问题。

set: (target, key, value) => {
  target[key] = value;
}
Run Code Online (Sandbox Code Playgroud)

这会在严格模式下引发 TypeError:

未捕获的类型错误:代理上的“设置”:陷阱返回错误的属性

由于它返回“falsish”,我通过使用以下方法返回 true 来修复它:

set: (target, key, value) => {
  target[key] = value;
  return true;
}
Run Code Online (Sandbox Code Playgroud)