=================================
=================================
=================================
출처: http://mohwaproject.tistory.com/entry/%EC%8A%A4%ED%83%9C%ED%8B%B1%EB%A9%94%EC%84%9C%EB%93%9C-%EC%83%9D%EC%84%B1%EB%B0%A9%EB%B2%95
static 속성과 메서드란?
- 함수 객체의 인스턴스 맴버와는 달리 각 인스턴스에 따라 달라지지 않는 맴버 그룹을
가리키며,인스턴스를 생성하지 않고 사용할 수 있어야 한다.
자바스크립트에서의 static 구현은 아래와 같이 함수 객체에 속성을 추가하는 방법으로
구현한다.
또한, 이 방법은 자바스크립트 디자인 패턴중 하나인 메모제이션 패턴에서도 활용된다.
1. 공개 static 맴버.
- // 일반적인 함수 객체의 인스턴스 맴버
-
var constructor_fn = (function(doc, win){
-
-
return function(x, y){
-
-
this.x = x;
-
this.y = y;
-
-
return this;
-
}
-
-
})(document, window);
-
-
var obj1 = new constructor_fn(1, 2);
-
alert(obj1.x + ' ' + obj1.y); // 1, 2
-
-
var obj2 = new constructor_fn(3, 4);
-
alert(obj2.x + ' ' + obj2.y); // 3, 4
-
-
-
// 인스턴스 맴버에 따라 맴버 그룹이 달라지지 않으며, 인스턴스를 생성하지 않고 사용할 수 있다.
-
var static_fn = (function(doc, win){
-
-
return function(){
-
return this;
-
}
-
-
})(document, window);
-
-
static_fn.x = 1;
-
static_fn.y = 2;
-
-
alert(static_fn.x + ' ' + static_fn.y); // 1, 2
2. 비공개 스태틱 맴버.
동일한 생성자 함수로 생성된 객체들이 공유하는 맴버이며, 생성자 외부에서는
접근할 수 없다.
즉, 비공개 메서드로 구현한다.
자바스크립트 클로져 및 비공개 맴버 작성법을 활용하여 비공개 static 맴버를 구현한다.
-
// 동일한 생성자 함수(constructor_fn())로 생성된 객체들이 공유하는 맴버이며, 생성자 외부에서는 접근할 수 없다.
-
var constructor_fn = (function(doc, win){
-
-
var key = 0;
-
-
return function(x, y){
-
-
this.x = x;
-
this.y = y;
-
this.getKey = getKey;
-
-
return this;
-
}
-
-
function getKey(){
-
return key++;
-
}
-
-
})(document, window);
-
-
-
var obj1 = new constructor_fn(1, 2);
-
alert(obj1.x + ' ' + obj1.y + ' ' + obj1.getKey() ); // 1, 2, 1
-
-
var obj2 = new constructor_fn(1, 2);
-
alert(obj2.x + ' ' + obj2.y + ' ' + obj2.getKey() ); // 3, 4, 2
-
-
-
-
// 위와 같이 유일키 반환 알고리즘에 쓰일 수 있다.
출처: http://mohwaproject.tistory.com/entry/스태틱메서드-생성방법 [무하프로젝트]
=================================
=================================
=================================
'WEB > JavaScript' 카테고리의 다른 글
[JavaScript] 자바스크립트 파일 압축(zip, jszip 등등) 관련 (0) | 2017.11.23 |
---|---|
[JavaScript] 자바스크립트 브라우저 터치 이벤트 (터치스크린, 모바일터치스키린 등등) 이벤트 관련 (0) | 2017.11.22 |
[JavaScript] 자바스크립트 Array 관련 (0) | 2017.11.07 |
[JavaScript] 자바스크립트 Map 관련 (0) | 2017.11.07 |
[JavaScript] 웹워커 Web Worker 웹에서 멀티 스레드 구현하기 (0) | 2017.11.06 |