2013-05-27 5 views
0

임 - 하위 모듈 패턴 코드로 작업 중입니다. 객체 리터럴을 사용하여 하위 모듈을 만들고 싶다면 하위 모듈 내부의 객체가 MODULE이고 객체 리터럴이 아니라는 문제는 this입니다. 어떤 생각?개체가 리터럴이고 하위 모듈 패턴이 'this'입니다.

var MODULE.sub = (function() { 

    var myObject = { 

     key: value, 

     method: function() { 
      this.key // this = MODULE and not MyObject... :(
     } 

    }; 

    return myObject.method; 

}(MODULE)); 
+1

어떻게 하위 모듈을 만들고 호출하고 있습니까? 더 나은, 바이올린을 제공합니다. – HBP

+0

'Module.sub.method()'처럼 호출했다면,'Module.sub','myObject'와'method' 안에있는'this'는 같은 객체 여야합니다. – Joseph

+0

바이올린 : http://jsfiddle.net/jZVwv/2/ – Juan

답변

0

해결은 ... 단지 public 메소드를 호출 MODULE.sub에서 함수를 반환합니다.

var MODULE.sub = (function() { 

    var myObject = { 

     key: value, 

     method: function() { 
      this.key // this = myObject :) 
     } 

    }; 

    return function() { 
     myObject.method(); 
    } 

}(MODULE)); 
+0

http://jsfiddle.net/jZVwv/3/ 바이올린 – Juan

0

이 나를 위해 작동합니다

var MODULE = MODULE || {}; 
MODULE.sub = (function() { 

    return { 

     myObject : { 

      key : 10, 

      method : function() { 
       console.log(this.key); 
      } 

     } 
    }; 

})(); 

그런 다음 호출 :

MODULE.sub.myObject.method(); 

당신은 방법이 아니라 "이"정의되지 않은 될 수 있도록 키를 반환했다. 이 같은 원하는 var에로에 키를 전달하면 당신은 개인 유지할 수 :

var MODULE = MODULE || {}; 
    MODULE.sub = (function() { 

     var key = 10, 

    return { 

     myObject : { 



      method : function() { 
       console.log(key); 
      } 

     } 
    }; 
})(); 
0

this keyword의 값은 함수가 호출되는 방식에 따라 가장 좋은 방법입니다 나도 몰라. 따라서 해당 함수를 MODULE.sub에 할당 한 다음 MODULE.sub(…)으로 호출하면 this은 물론 MODULE을 가리 킵니다. myObject.method(…)으로 호출 한 경우 this은 해당 객체를 가리 킵니다.

따라서 myObject (예 : @BingeBoys 응답)을 노출하거나 해당 함수를 내 보내지 말고 myObject 일 것으로 기대하십시오. 대신 사용할 수있는 bound 하나

return myObject.method.bind(myObject); 

또는

return function() { 
    return myObject.method(); 
}; 

의 명시 적 동등하거나 당신은 모든 객체에 method으로 기능을 넣어하지 않을 :

… 
    var myObject = { 
     key: value, 
    }; 
    return function() { 
     myObject.key // no `this` here 
     … 
    }; 
…