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 중국어 웹사이트의 기타 관련 기사를 참조하세요!