본문 바로가기
기타/프로그래밍 관련

javaScript prototype 질문

by WebHack 2014. 5. 29.

// 프로토타입 테스트

window.A = function() {

var _tmp = 'hello';    

   this.x = function() {

      console.log(_tmp + ' in this(공유)');

   };

   A.prototype.x = function() {

       console.log(_tmp + ' in prototype(상속)');

   };   

   this.thisSetTmp = function(_getStr) {

    _tmp = _getStr;

   };

   A.prototype.protoSetTmp = function(_getStr) {

    _tmp = _getStr;

   };

};

A.prototype.y = function() {

        console.log('외부에서 prototype 설정 in prototype(상속)');

    };

   

var B = new A();

var C = new A();

console.log(B);

console.log(C);

// A.x(); // undefine error 발생

A.prototype.x(); // hello in prototype(상속) 

B.x(); // hello in this(공유) // 같은 이름일 때 상속(prototype)보다 공유(this)가 우선 순위가 더 높음

C.x(); // hello in this(공유) 

B.y(); // 외부에서 prototype 설정 in prototype(상속) 

C.y(); // 외부에서 prototype 설정 in prototype(상속) 

B.thisSetTmp('worldB_1');

C.thisSetTmp('worldC_1');

B.x(); // worldB_1 in this(공유)

C.x(); // worldC_1 in this(공유) 

// C.prototype.protoSetTmp('world2'); // undefine error 발생(생성자는 상속(prototype)의 제어는 불가능)

B.protoSetTmp('worldB_2'); 

C.protoSetTmp('worldC_2'); 

B.x(); // worldB_1 in this(공유) 

C.x(); // worldC_2 in this(공유)

A.prototype.protoSetTmp('worldA_3');

B.x(); // worldB_1 in this(공유)

C.x(); // worldA_3 in this(공유) 

// //프로토타입 테스트

왜 빨강색을 보면 worldB_2를 넣었는데 파란색 처럼 worldB_1 이 나올까요?

C는 정상적으로 worldC_2가 나오는데 참으로 황당합니다.

혹 뭐가 잘못되었는지 알려주실 분 덧글 부탁 드립니다.