TypeError: «установить» на прокси: ловушка вернула ложное значение для свойства

Я изменил свой код с представления прототипа класса 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: «установить» на прокси: ловушка вернула ложную информацию для «сканирования» свойства

но код 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)

  }

person Al Ameen    schedule 22.08.2017    source источник
comment
Можете ли вы показать код метода set для scanning на объекте state? Что ты оттуда возвращаешь?   -  person Malice    schedule 22.08.2017
comment
function setRoute (newRoute) { var r = currentRoute() console.log('changeRoute from ' + (r?r.route:'') + ' to ' + newRoute) if (r && r.route == newRoute) { вернуть 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) } state — это глобальный объект состояния, который изменяется в методе onEnter.   -  person Al Ameen    schedule 22.08.2017
comment
Вы должны поместить приведенный выше код между обратными кавычками для удобочитаемости, осталось только нажать клавишу 1 на клавиатуре.   -  person Malice    schedule 22.08.2017
comment
я добавил в пост   -  person Al Ameen    schedule 22.08.2017
comment
Я предполагаю, что в некоторых случаях этот сеттер вернет false...   -  person Malice    schedule 22.08.2017
comment
Ошибка говорит, что сеттер вернул значение, отличное от true   -  person Malice    schedule 22.08.2017
comment
который из? метод onEnter или setRoute?   -  person Al Ameen    schedule 22.08.2017
comment
Давайте продолжим это обсуждение в чате.   -  person Malice    schedule 22.08.2017
comment
см. return true в примере на stackoverflow.com/a/46273767/965666 эквивалент в вашем случае должен устранить эту ошибку, для получения дополнительной информации см. информацию о возвращаемом значении по адресу developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/   -  person jimmont    schedule 24.05.2018


Ответы (1)


У меня была такая же проблема в примере использования прокси-объектов, который я просматривал в книге JavaScript Ninja... когда я пытался написать метод set.

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

Это выдает TypeError в строгом режиме:

Uncaught TypeError: «установить» на прокси: ловушка вернула ложное значение для свойства

Поскольку он возвращал «ложный», я исправил его, вернув true с помощью метода:

set: (target, key, value) => {
  target[key] = value;
  return true;
}
person Mark Cox    schedule 15.04.2021