2013-10-21 3 views
2

여러 메소드로 객체를 만들려고하지만 동일한 객체의 다른 메소드를 사용하려는 일부 메소드가 필요합니다.동일한 객체에서 다른 함수의 객체 함수 사용

var myObj = { 
    sum: function (a,b) { 
     return a + b; 
    }, 
    somethingThatUsesSum: function (a,b) { 
     return this.sum(a,b) * 5; 
    } 
}; 

이 당신이 그것을 호출하는 경우 다음과 같이 "작동": thismyObj로 설정되어

myObj.somethingThatUsesSum(1, 2); 

때문에 여기에 예입니다. 그러나 적용을 사용하는 경우 명시 적으로 thismyObj으로 설정하지 않으면 작동하지 않습니다.

나는 에 this을 사용하는 것을 좋아하지 않지만 더 좋은 방법이 있는지 궁금합니다.

myObj의 두 함수에서 모두 사용할 수있는 로컬 함수 sum으로 클로저를 만들 수 있다는 것을 알고 있지만 위에 제안 된 접근 방식에 가까운 다른 방법이 있는지 알고 싶었습니다.

+1

. 치명적인'with' 문은 'this'를 명시 적으로 참조하는 것을 피하는 한 가지 방법을 제공하지만 다른 문제가 있습니다. – Pointy

+0

감사합니다. 나는 그런 경우라고 생각했지만 단순화 된 해결책이 될 수있는 것을 놓치고 있는지 알고 싶었습니다. –

+0

어디에 적용 하시겠습니까? – bfavaretto

답변

0

체감 뾰족한는 그냥 자바 스크립트가 작동하는 방식이지만,이 경우에 당신이 (테스트) 할 수 말했다

자바 스크립트가 작동하는 단지 방법
var myObj = { 
    sum: function (a,b) { 
     return a + b; 
    }, 
    somethingThatUsesSum: function (a,b) { 
     return myObj.sum(a,b) * 5; 
    } 
}; 
myObj.somethingThatUsesSum.apply(0,[3,5])// Or ...UsesSum.call(0,3,5) 
// => 40 
//0 stands for "I don't care what this is invoked on" 
관련 문제