Javascript 为什么可以';我不能在函数调用前使用前缀运算符吗?
当我运行Javascript 为什么可以';我不能在函数调用前使用前缀运算符吗?,javascript,prefix-operator,Javascript,Prefix Operator,当我运行++this.get('voates')时,我得到以下错误消息 未捕获引用错误:前缀操作中的左侧表达式无效。 我收到了与++(this.get('voates'))相同的错误消息 我能够解决this.get('voates')+1的问题,但我不明白前缀运算符为什么不起作用 为什么this.get('voates')不应该计算为0,然后变成1并返回值1 上下文中的原始代码: var Comment = Backbone.Model.extend({ initialize: func
++this.get('voates')
时,我得到以下错误消息
未捕获引用错误:前缀操作中的左侧表达式无效。
我收到了与++(this.get('voates'))
相同的错误消息
我能够解决this.get('voates')+1
的问题,但我不明白前缀运算符为什么不起作用
为什么this.get('voates')
不应该计算为0,然后变成1并返回值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('voates')
;i、 e,某种形式:
f() = x;
无效,因为f()
不是左值
如果您检查,您将看到++x
与以下内容大致相同:
x = x + 1
并且不能为函数调用赋值。你真的想说:
this.get('votes') = this.get('votes') + 1;
这不是JavaScript。根本的问题是您不能分配给
this.get('voates')
;i、 e,某种形式:
f() = x;
无效,因为f()
不是左值
如果您检查,您将看到++x
与以下内容大致相同:
x = x + 1
并且不能为函数调用赋值。你真的想说:
this.get('votes') = this.get('votes') + 1;
这不是JavaScript。我在理解规范时遇到了问题。为什么在尝试添加1之前,这个.get('voates')不计算为0?因为
++
尝试修改其操作数,并且方法调用不是可修改的值。您的问题发生在调用this.get('voates')
之前,因此它没有机会进行任何计算。请记住,++x
是x=x+1
的简写,所以您的++f()
试图说f()=f()+1
。所以您基本上只是说您只能在变量前面使用+?我在理解规范方面有困难。为什么不这样做呢。获取('vots'))在尝试添加1之前求值为0?因为++
尝试修改其操作数,并且方法调用不是可修改的值。您的问题发生在调用this.get('voates')
之前,因此它没有机会进行任何计算。请记住,++x
是x=x+1
的缩写,因此您的++f()
试图说f()=f()+1
。那么你基本上只是说你只能在变量前面使用+?@mu太短了,我正在寻找一个副本,但现在找不到,我认为这个问题应该去掉不相关的主干,以便对其他人有用。@emilebergron我也在寻找一个副本,但找不到。我不知道把某人的问题改写成“为什么++f()
aReferenceError
?”我有多舒服。我认为去掉backbone.js
标签是公平的,因为这不是真正的主干。@mu太短了,我正在寻找一个副本,但现在找不到,我认为这个问题应该去掉不相关的主干,以便对其他人有用。@Emilebergron我也在寻找一个副本,但找不到。我不知道把某人的问题改写成“为什么++f()
aReferenceError
?”我有多舒服。我认为删除backbone.js
标签是公平的,因为这实际上与主干无关。