prototype 을 이용한 패턴
일반적인 방식으로 동일하게 사용되는 내용을 prototype에 정의해 불필요한 메모리 할당을 막게 된다.
MyPackage.MyClass = function() {
// 멤버 어트리뷰트
this.object1 = something;
this.object2 = {
key1: value,
key2: value,
}
};
MyPackage.MyClass.prototype = {
constructor: MyPackage.MyClass,
// 공통 멤버 정의
memeber: function() {
}
};
즉시실행 함수를 이용한 패턴
크게 prototype 방식을 즉시실행 함수로 한번더 감싼 형태로 this를 붙이지 않은 객체들과 내부 기능처리 함수들을 캡슐화 하는 효과가 있다.
MyPackage.MyClass = ( function() {
// 멤버 어트리뷰트
// new 로 생성한 인스턴스에게만 스코프를 제한하기 위해서 this. 사용한다.
this.object = something;
// 내부 객체
this 도 아니고, 리턴될 메인 함수에 포함되지도 않았으므로 private 객체가 된다.
function InnerMethod() { }
// 외부로 노출할 함수 : 리턴될 메인객체의 prototype에 할당하거나 아예 this. 로 할당하면 public 객체가 된다.
var someMethod = function() { };
this.someMethod = function() { };
// 메인 함수
// 이 패키지가 호출되면 실제 이 함수의 객체가 리턴되도록 한다.
function MyClass ()
{
// 각 인스턴스마다 생성해야 하는 내용
}
// 위 함수에 대한 프로토타임 함수 정의
MyClass.prototype = {
constructor: MyClass,
// 각 인스턴스가 공통으로 가져야 하는 내용
// 멤버 함수 추가 : 이곳에 직접 메쏘드를 구현하거나 위에 구현된 함수를 지정
member: function () { };
member: someMethod;
};
return MyClass;
})();
new 를 통해 인스턴스를 생성하면, 즉시실행 함수를 통해 MyClass가 리턴되는 구조.
var obj = new MyPackage.MyClass();
'프로그래밍 > Web' 카테고리의 다른 글
[tauri] 테스트용 앱 기본 구성 (0) | 2024.05.03 |
---|---|
리액트 주요 요소 (0) | 2024.04.24 |
[tauri] 개발환경 (0) | 2024.03.19 |
[JavaScript] Promise, async/await (0) | 2018.08.17 |
WebXR + three.js (0) | 2018.08.09 |
VSCode 웹 디버깅 (0) | 2018.07.19 |
openssl (0) | 2018.07.17 |
Windows 레드마인 설치(Bitnami) (1) | 2017.09.22 |
Gradle Wrapper (0) | 2017.03.06 |
스프링 요청/응답 (0) | 2017.02.26 |