NATIVE

settings_applicationsObject  >   settings_applicationsFunction

NATIVE

Draft
  • bug_report

Internal slot[[Prototype]]

생성자(constructor)를 가진 객체(object) 또는 인터페이스(interface)가 인스턴스(instance)를 생성할 때 상속할 수 있는 프로퍼티(property)와 메소드(method)를 가지고 있는 원형 객체를 참조하는 생성자의 은닉된 속성이다.

만약에 상속받은 객체(object) 또는 인터페이스(interface)가 존재한다면 상속한 객체(object) 또는 인터페이스(interface)의 [[Prototype]] 프로퍼티(property)와 메소드(method)를 추가적으로 사용할 수 있다.

설명

모든 사용자가 작성한 생성자 함수에게 상속 가능한 원형 객체이다. Function 객체가 Object 객체를 상속했기에 Object 객체의 [[Prototype]]을 그대로 상속받는다. 또한 직접 속성과 메소드를 추가할 수도 있다.

특이하게도 Function 객체의 [[Prototype]]은 생성자 함수일 경우 생성자 함수에 의해서 생성된 인스턴스(Instance) 객체들은 더 이상 Function 객체의 [[Prototype]]을 상속하지 않고 Object 객체의 [[Prototype]]만을 상속하여 갖는다.

하위 트리 탐색

  • Methods

    • apply()

      주어진 this 또는 arguments로 함수를 호출한다.
    • bind()

      원본 함수와 동일한 본문을 갖는 바인딩된 함수를 만든다. this 키워드가 있는 경우 실제로 자신을 참조할 수 있도록 활성화된다.
    • call()

      인수를 지정하여 객체의 메소드를 호출한다. apply() 메소드와 매우 흡사하지만 배열 하나만을 인수로 지정하는 apply() 메소드와 달리 인수를 추가적으로 설정할 수 있다는 것이 차이가 있다.
    • toSource()

      객체의 소스코드를 나타내는 문자열을 반환한다. 웹브라우저별 지원 여부를 체크할 필요가 있다.
    • toString()

      Object.prototype.toString() 메소드를 상속받았으며 재정의를 통해 사용하거나 재정의 없이 사용할 수 있다. 이 메소드는 객체가 텍스트 값으로 표시되거나 객체가 문자열이 예상되는 방식으로 참조될 때 호출된다. 객체에 따라서 결과는 다를 수 있다.
  • Properties

    • caller

      지정된 함수를 호출한 함수를 참조한다. strict 모드에서는 사용할 수 없다.
    • length

      함수에 사용 되고 있는 인수의 개수를 참조한다.
    • name

      함수 이름을 참조한다.
    • prototype

      모든 생성자에게 상속되며 생성자의 프로토타입을 나타낸다.

상속 계층 탐색

Object

  • Methods

    • hasOwnProperty()

      객체가 특정 프로퍼티를 가지고 있는지를 블린 값으로 반환한다.
    • isPrototypeOf()

      해당 객체가 다른 객체의 프로토타입 체인에 속한 객체인지를 체크한다. 이 메소드는 instanceof 연산자와 함께 특정 프로토타입으로부터 상속된 객체만 작동하게 하려는(예를 들어 특정 메소드나 속성이 객체에 있다는걸 보장하려는 때) 코드에서 특히 쓸모가 많다.
    • propertyIsEnumerable()

      매개 변수의 속성이 열거가능한지 여부를 체크한다.
    • toLocaleString()

      객체를 나타내는 문자열을 사용 지역의 방식으로 출력이 된다. 이 메소드는 상속받은 모든 객체가 사용할 수 없고 아래와 같은 상속된 객체에 사용이 된다. Array.prototype.toLocaleString() Number.prototype.toLocaleString() Date.prototype.toLocaleString()
    • toString()

      객체를 나타내는 문자열을 반환한다.
    • valueOf()

      객체의 Primitive(원시) 값을 반환한다.
  • Properties

    • constructor

      객체의 생성자 함수를 참조한다.
    • __proto__

      상속된 [[Prototype]] 참조하거나 설정가능하며 일반적으로 실제 코드상에서는 잘 사용되지 않는다. ECMAScript에서 사용되지 않는 비표준이지만 최신 웹브라우저에서는 비공식적으로 지원하고 있다. 따라서 곧 표준 속성으로 지원될 확률이 높다.

Object

  • Methods

    • hasOwnProperty()

      객체가 특정 프로퍼티를 가지고 있는지를 블린 값으로 반환한다.
    • isPrototypeOf()

      해당 객체가 다른 객체의 프로토타입 체인에 속한 객체인지를 체크한다. 이 메소드는 instanceof 연산자와 함께 특정 프로토타입으로부터 상속된 객체만 작동하게 하려는(예를 들어 특정 메소드나 속성이 객체에 있다는걸 보장하려는 때) 코드에서 특히 쓸모가 많다.
    • propertyIsEnumerable()

      매개 변수의 속성이 열거가능한지 여부를 체크한다.
    • toLocaleString()

      객체를 나타내는 문자열을 사용 지역의 방식으로 출력이 된다. 이 메소드는 상속받은 모든 객체가 사용할 수 없고 아래와 같은 상속된 객체에 사용이 된다. Array.prototype.toLocaleString() Number.prototype.toLocaleString() Date.prototype.toLocaleString()
    • toString()

      객체를 나타내는 문자열을 반환한다.
    • valueOf()

      객체의 Primitive(원시) 값을 반환한다.
  • Properties

    • constructor

      객체의 생성자 함수를 참조한다.
    • __proto__

      상속된 [[Prototype]] 참조하거나 설정가능하며 일반적으로 실제 코드상에서는 잘 사용되지 않는다. ECMAScript에서 사용되지 않는 비표준이지만 최신 웹브라우저에서는 비공식적으로 지원하고 있다. 따라서 곧 표준 속성으로 지원될 확률이 높다.

기술 문서

새로 생성된 함수의 상속된 prototype 프로퍼티로 참조되는 대상 객체는 Object이며 함수 자신의 Prototype인 Object 객체를 기반으로 프로퍼티를 확장 할 수 있다. 다른 내장된 생성자 함수를 통해서 만들어진 인스턴스에게 prototype 프로퍼티를 허용하지 않는 것과 비교된다.

다음 아래의 코드는 상속(확장)을 보여주는 샘플 코드이다.

// 상속을 위한 부모 객체 준비
var parent = {
  show: function() {
    console.log(this.msg);
  }
};

// 사용자 생성자 함수
function Child(msg) {
  this.msg = msg;
}

// 사용자 생성자 함수의 확장
Child.prototype = parent; // 상속

var oMy = new Child("hello"); // 객체 인스턴스 생성
oMy.show(); // hello 출력

console.dir(oMy); // 아래 콘솔의 결과를 확인(Chrome 기준)

콘솔 출력(console.dir()) 결과:

Child
	msg: "hello"
	__proto__:
		show: ƒ ()
		__proto__:
			constructor: ƒ Object()
			__defineGetter__: ƒ __defineGetter__()
			__defineSetter__: ƒ __defineSetter__()
			hasOwnProperty: ƒ hasOwnProperty()
			__lookupGetter__: ƒ __lookupGetter__()
			__lookupSetter__: ƒ __lookupSetter__()
			isPrototypeOf: ƒ isPrototypeOf()
			propertyIsEnumerable: ƒ propertyIsEnumerable()
			toString: ƒ toString()
			valueOf: ƒ valueOf()
			toLocaleString: ƒ toLocaleString()
			get __proto__: ƒ __proto__()
			set __proto__: ƒ __proto__()

위의 콘솔 출력 결과를 보면 Childparent를 상속받으며 parentObject를 상속받는다.

실제로 테스트할 수 있는 라이브 코드는 아래를 참고하길 바란다.

지원 웹브라우저