Prototype

Youtube 동영상 테스트

1
2
3
4
/**
* __proto__는 자신의 부모 역할을 하는 프로토타입 객체를 가리킨다.
* function의 prototype은 이 함수가 생성자로 사용될 때 이 함수를 통해 생성된 객체의 부모 역할을 하는 프로토타입 객체를 가리킨다.
*/
  • 자바스크립트에서 모든 객체는 자신을 생성한 생성자 함수의 prototype 프로퍼티가 가리키는 객체를 자신의 프로토타입 객체(부모객체)로 취급한다.
  • 모든 객체에는 proto 가 있다.
  • 상속 받아서 사용할 수 있다. (이것을 프로토타입 체이닝 이라 부른다)
  • 상속 받을 proto 를 명시적으로 바꿀 수 있다. This 바인딩 (call, apply)
1
2
3
4
5
6
7
8
9
var Person = function(arg) {
if(!(this instanceof arguments.callee)) {
return new Person(arg);
}
this.name = arg ? arg : 0;
}

var mw = Person('wook');
console.log(mw.name);
  • 생성자 함수를 호출 할 때 빈 객체가 생성된다. (코드 내부에서 this는 이 빈 객체에 바인딩 된다)
  • 빈 객체는 생성자 함수.prototype을 가리킨다. __proto__가 생성자 함수.prototype을 가리키는 것이다.
  • new를 붙이지 않고 생성자 함수를 호출 할 경우를 대비하여 강제로 인스턴스를 생성하는 패턴도 넣어주었다.
  • arguments.callee는 호출된 함수를 가리킨다.
Share