为什么不能在函数调用前使用前缀运算符?
Why can't I use the prefix operator in front of a function call?
当我 运行 ++this.get('votes')
时,我收到以下错误消息
Uncaught ReferenceError: Invalid left-hand side expression in prefix operation.
我收到与 ++(this.get('votes'))
相同的错误消息。
我能够解决 this.get('votes') + 1
的问题,但我不明白为什么前缀运算符不起作用。
为什么 this.get('votes')
不应计算为 0 然后变为 1 而 return 不应为值 1?
上下文中的原始代码:
var Comment = Backbone.Model.extend({
initialize: function(message) {
this.set({votes: 0, message: message});
},
upvote: function(){
// Set the `votes` attribute to the current vote count plus one.
this.set('votes', ++this.get('votes'));
}
}
var comment = new Comment('This is a message');
comment.upvote();
潜在的问题是您不能分配给 this.get('votes')
;即,某种形式:
f() = x;
无效,因为 f()
不是左值。
如果您检查 specs,您会发现 ++x
与:
大致相同
x = x + 1
并且您不能为函数调用赋值。你真的想说:
this.get('votes') = this.get('votes') + 1;
那不是 JavaScript。
当我 运行 ++this.get('votes')
时,我收到以下错误消息
Uncaught ReferenceError: Invalid left-hand side expression in prefix operation.
我收到与 ++(this.get('votes'))
相同的错误消息。
我能够解决 this.get('votes') + 1
的问题,但我不明白为什么前缀运算符不起作用。
为什么 this.get('votes')
不应计算为 0 然后变为 1 而 return 不应为值 1?
上下文中的原始代码:
var Comment = Backbone.Model.extend({
initialize: function(message) {
this.set({votes: 0, message: message});
},
upvote: function(){
// Set the `votes` attribute to the current vote count plus one.
this.set('votes', ++this.get('votes'));
}
}
var comment = new Comment('This is a message');
comment.upvote();
潜在的问题是您不能分配给 this.get('votes')
;即,某种形式:
f() = x;
无效,因为 f()
不是左值。
如果您检查 specs,您会发现 ++x
与:
x = x + 1
并且您不能为函数调用赋值。你真的想说:
this.get('votes') = this.get('votes') + 1;
那不是 JavaScript。