为什么我不能在函数调用前使用前缀运算符?

时间:2017-11-18 21:24:50

标签: javascript prefix-operator

当我运行++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并返回值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();

1 个答案:

答案 0 :(得分:4)

根本问题是您无法分配到this.get('votes');即某种形式:

f() = x;

无效,因为f()不是左值。

如果您查看specs,则会看到++x与以下内容大致相同:

x = x + 1

并且您无法为函数调用分配值。你真的想说:

this.get('votes') = this.get('votes') + 1;

那不是JavaScript。