TypeError:' set'代理人:陷阱返回属性的falsish

时间:2017-08-22 07:00:50

标签: 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
};

es6语法

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

onEnter(state){
    state.scaning = false
    state.status = 'Scan to continue'
    curState = states.init
  }
}

我收到这样的错误

  

TypeError:' set'代理人:陷阱返回虚假财产' scaning'

但是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)

  }

1 个答案:

答案 0 :(得分:0)

我在浏览 JavaScript Ninja 书的一个使用代理对象的示例中遇到了同样的问题......当我试图编写一个 set 方法时。

set: (target, key, value) => {
  target[key] = value;
}

这会在严格模式下抛出 TypeError:

<块引用>

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

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

set: (target, key, value) => {
  target[key] = value;
  return true;
}