나는 "새로운"키워드와 "this"키워드의 범위와 관련된 모든 문제를 피하는 데 도움이되기 때문에 (모듈 패턴과 비슷한) 내 코드에 기능적 OOP 스타일을 사용하는 것을 선호합니다. 콜백.JavaScript의 기능적 OOP 스타일에 관한 질문
하지만 약간의 사소한 문제가 있습니다. 다음 코드를 사용하여 클래스를 만들고 싶습니다.
namespace.myClass = function(){
var self = {},
somePrivateVar1;
// initialization code that would call
// private or public methods
privateMethod();
self.publicMethod(); // sorry, error here
function privateMethod(){}
self.publicMethod = function(){};
return self;
}
문제는 아직 정의되지 않은 초기화 코드에서 공용 메서드를 호출 할 수 없다는 것입니다. 분명한 해결책은 init 메소드를 생성하고 "return self"라인 전에 호출하는 것입니다. 하지만 좀 더 우아한 해결책을 알고 있을까요?
또한이 패턴을 사용하여 상속을 어떻게 처리합니까? 다음 코드를 사용하지만 아이디어와 제안을 듣고 싶습니다.
namespace.myClass2 = function(){
var self = namespace.parentClass(),
somePrivateVar1;
var superMethod = self.someMethod;
self.someMethod = function(){
// example shows how to overwrite parent methods
superMethod();
};
return self;
}
편집.
일반적으로 언어에서 제공하는 기술을 사용하지 않는 것이 좋습니다. 그건 당신이'new'를 우회해서는 안된다는 것을 의미합니다. 자바 스크립트로 끝난 것입니다. 아마도이 특별한 언어에서 가장 좋은 방법 일 것입니다. –
전화를 걸기 전에 맨 위의 메서드를 정의 할 수없는 이유는 무엇입니까? –
Gs, private 멤버를 사용하여 객체를 만드는 데 클로저를 사용하는 것은 언어에서 제공하는 기술이라고 생각합니다. Douglas Crockford조차도 그것을지지합니다. 나는 또한 약간의 성능 테스트를하기 전에, 그리고 적은 양의 물체에 대해서는별로 중요하지 않습니다. (http://valums.com/b/) 그러나 나에게 그것은 코드를 더 깨끗하게 만든다. –