我将我的代码从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)
}
答案 0 :(得分:0)
我在浏览 JavaScript Ninja 书的一个使用代理对象的示例中遇到了同样的问题......当我试图编写一个 set 方法时。
set: (target, key, value) => {
target[key] = value;
}
这会在严格模式下抛出 TypeError:
<块引用>未捕获的类型错误:代理上的“设置”:陷阱为属性返回错误
由于它返回“falsish”,因此我通过使用该方法返回 true 来修复它:
set: (target, key, value) => {
target[key] = value;
return true;
}