>웹 프론트엔드 >JS 튜토리얼 >자바스크립트 프로토타입 속성이란 무엇입니까? 객체를 인스턴스화하는 세 단계

자바스크립트 프로토타입 속성이란 무엇입니까? 객체를 인스턴스화하는 세 단계

伊谢尔伦
伊谢尔伦원래의
2017-07-20 15:42:451530검색

 JS의 모든 함수에는 객체, 즉 프로토타입 객체를 참조하는 프로토타입 속성이 있습니다. 이 함수에는 생성자와 일반 함수가 포함됩니다. 생성자의 프로토타입에 대해 더 많이 이야기하고 있지만 일반 함수에도 프로토타입이 있다는 사실을 부인할 수 없습니다. 예를 들어 일반 함수는

function F(){ 
  alert(F.prototype instanceof Object) //true; 
}

생성자, 즉 객체를 생성하는 것입니다. 먼저 생성자를 통해 객체를 인스턴스화하는 과정을 이해해보자.

function A(x){ 
  this.x=x; 
} 
var obj=new A(1);

obj 개체를 인스턴스화하는 세 가지 단계가 있습니다.
1. obj 개체를 만듭니다. obj=new Object();

2. obj의 내부 __proto__를 구성하는 함수 A의 프로토타입을 가리킵니다. 동시에 obj .constructor===A.prototype.constructor(A.prototype이 더 이상 원본 A 프로토타입을 가리키지 않더라도 이는 항상 true입니다. 즉, 인스턴스 객체의 생성자 속성입니다. 클래스의 클래스는 항상 "생성자"의 프로토타입 생성자를 가리킵니다. 따라서 obj.constructor.prototype은 A.prototype을 가리키게 됩니다(obj.constructor.prototype===A.prototype, 이는 A.prototype일 때 유지되지 않습니다). 아래에서 볼 수 있듯이 변경사항이 적용됩니다.) obj.constructor.prototype과 내부 _proto_는 서로 다른 것입니다. _proto_는 객체를 인스턴스화할 때 사용됩니다. Obj에는 프로토타입 속성이 없지만 __proto__를 사용하여 프로토타입 체인에서 프로토타입 속성을 얻을 수 있습니다. 및 프로토타입 메서드를 사용하면 FireFox에서 경고할 수 있는 __proto__를 노출합니다(obj.__proto__).

3. obj를 사용하여 생성자 A를 호출하여 멤버(예: 개체 속성 및 개체 메서드)를 설정합니다.
이 세 단계가 완료되면 obj 객체는 생성자 A와 더 이상 연결되지 않습니다. 이때 생성자 A가 멤버를 추가하더라도 더 이상 인스턴스화된 obj 객체에 영향을 미치지 않습니다. 이때 obj 객체에는 x 속성과 생성자 A의 프로토타입 객체의 모든 멤버가 있습니다. 물론 이때 프로토타입 객체에는 멤버가 없습니다.

프로토타입 개체는 처음에는 비어 있습니다. 즉, 멤버가 없습니다(예: 프로토타입 속성 및 프로토타입 메서드). 다음 방법을 사용하여 프로토타입 객체에 포함된 멤버 수를 확인할 수 있습니다.

var num=0; 
for(o in A.prototype) { 
  alert(o);//alert出原型属性名字 
  num++; 
} 
alert("member: " + num);//alert出原型所有成员个数。

그러나 일단 프로토타입 속성이나 프로토타입 메서드가 정의되면 생성자를 통해 인스턴스화된 모든 객체는 내부 _proto_ 체인을 통해 달성되는 이러한 프로토타입 속성과 프로토타입 메서드를 상속합니다.

A.prototype.say=function(){alert("Hi")};

A의 모든 객체에는 say 메소드가 있습니다. 이 프로토타입 객체의 say 메소드는 모든 객체가 say 메소드의 복사본을 갖는 대신 모든 사람이 공유하는 유일한 복사본입니다.

위 내용은 자바스크립트 프로토타입 속성이란 무엇입니까? 객체를 인스턴스화하는 세 단계의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.