• Javascript Prototype에 대하여 (2)

    Posted Mon 21 2016 View 1009 Comments 0

지난 포스팅에서 우리는 "asd"가 String객체가 아닌 String.prototype을 상속 받는다는 것까지 했었다.

아래 코드를 개발자도구에 적어보자.

var A = function () {
    this.aa = "aa"
}
var B = new A;

A.prototype.bb = "bb";
A.cc = "cc";

여기서 B.bbB.cc중 어떤것이 가능할까?

당연히 B.bb다. A가 처음 생겨날때 cc는 있지 않았으므로, A.prototype 안에는 cc가 존재하지 않는 것이다.

자 이제 콘솔창에 B를 입력해보자.

그럼 아래와 같이 나올 것이다.


B A{aa:"aa"} __proto__: Object bb:"bb" constructor: function() arguments: null caller: null cc: "cc" length: 0 name: "" prototype: Object __proto__: function() <function scope>

__proto__는 우리가 흔히 이야기 하는 prototype link이다.

현재 이 객체가 상속받은 prototype객체를 나타내준다. 즉, 내가 받은 prototype은 이것이오. 하는 것이다.

( 궁금하신 분은 B.__proto__ = new 다른객체; 해보시기 바란다. 그럼 Bprototype link는 끊기게 되고 더이상 B.bb는 불가능 하게 될 것이다. )

또한 이것은 link값으로 B가 생겨난 후에 정의 된 A.cc에 대해 B.__proto__.constructor.cc가 가능한 것을 볼 수 있다.

다시 말하면, 자바스크립트의 객체는 언제든 해당 링크를 끊고 다른 프로토타입을 링크하는것이 가능하다는 것이다.

( 물론 그렇다고 String객체의 __proto__에다 Number객체의 prototype 넣을 수는 없다. )




다시 정리하자면

var 하위객체 = new 상위객체;

에서

하위객체.constructor == 상위객체 => true;

하위객체.__proto__ == 상위객체.prototype => true;

하위객체.__ptoto__ == 상위객체 => false;

하위객체 ⊂ 상위객체 => false;

하위객체 ∩ 상위객체 => NULL;

이다.

prototype개념이란 단지 상위객체가 생성될 당시 만들어진 상위객체.prototype을

하위객체가 하위객체.__proto__로 참조하는 것, 그리고 prototype link를 통해 최상위 참조값으로 가면 window객체가 있다는 것이다.

 

크리에이티브 커먼즈 라이선스 이 저작물은 크리에이티브 커먼즈 저작자표시-변경금지 2.0 국제 라이선스에 따라 이용할 수 있습니다.

Leave a Comment
Image Login with
댓글 (Your Comment) Save Comments


Comments (0)
Visitors Information
  • TODAY : 1
  • YESTERDAY : 3
  • TOTAL : 2013
Copyright by AceMoa.com All rights reserved. © 2012