2017-11-18 5 views
0

, 나는 내가 ++(this.get('votes'))과 같은 오류 메시지가있어 다음과 같은 오류 메시지가함수 호출 앞에 접두사 연산자를 사용할 수없는 이유는 무엇입니까? 내가 <code>++this.get('votes')</code>을 실행하면

Uncaught ReferenceError: Invalid left-hand side expression in prefix operation. 

를 얻을.

나는 this.get('votes') + 1으로 문제를 해결 할 수 있었다하지만 접두사 연산자가 작동하지 않는 이유를 알아낼 수 없습니다.

this.get('votes') 0으로 평가해서는 안하고 일을하게하고, 값 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

MU-IS-너무 짧은 내가 속는 사람을 찾고 있었다 지금 당장 하나를 찾을 수 없습니다 나는이 질문은 다른 사람에게 유용하게 관련이없는 백본을 박탈해야한다고 생각하고있다. –

+1

@EmileBergeron 중복도 찾고 있었지만 찾을 수 없습니다. 누군가 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ backbone.js 태그를 삭제하는 것이 공평 할 것이라고 생각합니다. 이것이 백본에 관한 것이 아니기 때문입니다. –

답변

4

근본적인 문제는 당신이 this.get('votes')에 할당 할 수 없다는 것입니다;

f() = x; 

f()이 (가) lvalue가 아니기 때문에 유효하지 않습니다. 당신이 specs을 선택하면

, 당신은 ++x 대략와 동일한 것을 볼 수 있습니다 :

x = x + 1 

당신은 함수 호출에 값을 할당 할 수 없습니다. 당신은 정말로 말하려고합니다 :

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

그리고 이것은 JavaScript가 아닙니다. @

+0

사양을 이해하는 데 문제가 있습니다. 왜 this.get ('votes')가 1을 추가하려고 시도하기 전에 0으로 평가되지 않습니까? – MattGoldwater

+2

'++'는 피연산자를 수정하려고 시도하기 때문에 메소드 호출은 수정 가능한 값이 아닙니다. 'this.get ('votes')'가 호출되어 아무 것도 평가할 기회가 없기 전에 문제가 발생합니다. '++ x'는'x = x + 1'에 대한 속기이므로'++ f()'는'f() = f() + 1'라고 말하려고합니다. –

+0

기본적으로 변수 앞에 ++ 만 사용할 수 있다고 말하는 것입니까? – MattGoldwater