2012-11-18 3 views
1

제 생성자와 함께 메서드 체이닝을 수행하려고하는데, 어떻게해야하는지 정확히 알지 못합니다. 여기까지 내 코드는 다음과 같습니다.JavaScript의 생성자 및 메서드 체이닝

function Points(one, two, three) { 
this.one = one; 
this.two = two; 
this.three = three; 
} 

Points.prototype = { 

add: function() { 
    return this.result = this.one + this.two + this.three; 
}, 
multiply: function() { 
    return this.result * 30; 
} 

} 

var some = new Points(1, 1, 1); 
console.log(some.add().multiply()); 

add 메서드의 반환 값에 대해 multiply 메서드를 호출하려고합니다. 내가하는 것이 아니라는 것을 분명히 알지만, 그것이 무엇인지는 확실하지 않습니다.

의견이 있으십니까?

답변

12

표현식의 결과를 반환하지 않아야합니다. 대신 이것을 돌려 보내십시오.

Points.prototype = { 

    add: function() { 
     this.result = this.one + this.two + this.three; 
     return this; 
    }, 
    multiply: function() { 
     this.result = this.result * 30; 
     return this; 
    } 

} 

그리고는 다음과 같이 사용 : 물론 console.log(some.add().multiply().result);

+0

아를, 물론. 완벽 했어, 내가 찾고 있었던거야. 나는 왜 거기에'.result'가 있는지 궁금합니다. 나는 그것이'result' 속성을 반환한다는 것을 안다. 그러나, 어떻게? – Sethen

+1

@Sethen : 음, Sidharth의 좋은 편집. .multiply() 호출이 끝나면 Point 인스턴스를 반환하고 해당 객체에서 .result 속성을 확인하여 결과 속성의 현재 값을 제공합니다. – BuddhiP

+2

@Sethen :'.multiply()'는 'this'를 반환합니다. 그래서'this.result' 나'some.result'에 접근하는 것과 같습니다. '.add'는'this'도 반환하므로, 객체의 속성 인'multiple'을 호출 할 수 있습니다. 그건 같은거야. –

관련 문제