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()
a
ReferenceError
?”我有多舒服。我认为去掉
backbone.js
标签是公平的,因为这不是真正的主干。@mu太短了,我正在寻找一个副本,但现在找不到,我认为这个问题应该去掉不相关的主干,以便对其他人有用。@Emilebergron我也在寻找一个副本,但找不到。我不知道把某人的问题改写成“为什么
++f()
a
ReferenceError
?”我有多舒服。我认为删除
backbone.js
标签是公平的,因为这实际上与主干无关。