"이것을 반환"하는 계시 모듈 패턴 내에서 로컬 함수를 처리하는 방법

StackOverflow https://stackoverflow.com//questions/12691636

문제

나는 계시 모듈 패턴을 좋아한다.나는 공개하고 반환하고 싶은 개인 기능을 가질 것입니다.그러나 내 계시 모듈 패턴 내에서"이것을 반환"하는 일부 로컬 기능을 가질 수도 있습니다...

var player = function(){
//my local variable scope...

oplayer.damage = function(){
    if(!this.grace){
        this.shield--;
        if (this.shield == 0){
            return this;
        }
    }
};
      ...

      return {
      damage : oplayer.damage
      }
      }();

내가 명시 적으로 무언가를 반환하는 경우"이것을 반환"하는 것이 괜찮습니까?(계시 모듈 패턴을 사용하는 맥락에서).그렇지 않은 경우 로컬 함수 오 플레이어를 어떻게 변환 할 수 있습니까?피해는 적절한 맥락에서 사용할 수?어떤 조언을 주셔서 감사합니다!난 그냥 전체"이 반환"개념의 주위에 내 마음을 포장하려고합니다.

도움이 되었습니까?

해결책

"이" "는 실행에 대한 문맥이기 때문에 괜찮을 것입니다."잘라 내기"객체의 일부인 공용 함수 에서이 작업을 반환하면 컷 다운 객체 만 사용할 수 있습니다.그래서, 나는 다음과 같은 시나리오를 고려할 때 당신이하려는 것이 좋을 것이라고 생각합니다.

var test = function(){
   var pri = function(){
       console.log("Private");
   };

   var pub = function(){
       pri();
       console.log("pub");
       return this;
   }

   return {
       pub: pub
   };
}();

console.log(test.pri); //-> undefined
console.log(test.pub); //-> function(){…}
console.log(test.pub()); //-> "Private" "pub" [Object {…}]
console.log(test.pub().pri); //-> "Private" "pub" undefined
.

다른 팁

먼저 무엇을 확인하시기 바랍니다 this 키워드는,있다 이다 좋은 소개.

내가 명시 적으로 무언가를 반환하는 경우"이것을 반환"하는 것이 괜찮습니까?

네,물론입니다.이것은 메소드의 체인성을 위한 기본 패턴입니다.모든 것이 호출된 객체를 반환합니다.하지만,그것에 의존하기 위해서는 모든 경우에 그것을 돌려주어야 합니다.방패가 떨어질 때만요.

이 당신의 목표가 아니었다면,그냥 정상을 사용합니다 return; 진술(결과 undefined 같은 반환 문).

계시 모듈 패턴을 사용하는 맥락에서

당신이 그 기능을 정의한 곳은 절대적으로 중요하지 않습니다.

내 기능을 적절한 컨텍스트에서 사용하도록 변환 하시겠습니까?

(나는"컨텍스트"당신은 this 여기에 객체)

당신은 정말 할 수 없습니다,의 값 this 항상 함수의 호출에 달려 있습니다.물론,당신은 할 수 있습니다 .bind() 당신의 기능 player 개체 또는 직접 만 반환 player 대신 this.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top