현재 위치 - 중국 분류 정보 발표 플랫폼 - 비즈니스 서비스 정보 - js의 프로토타입은 무엇인가요?

js의 프로토타입은 무엇인가요?

자바스크립트도 객체지향 언어이지만 클래스 기반 언어가 아닌 프로토타입 기반 언어입니다.

JavaScript에서 객체 생성 기사에서 언급했듯이 생성자를 사용하여 객체를 생성하는 데 문제가 있습니다. 즉, 동일한 생성자의 여러 인스턴스에 대해 동일한 메소드가 다르기 때문에 프로토타입을 사용하여 이를 홍보합니다. * 속성과 메소드는 모든 인스턴스 간에 공유 목적을 달성하기 위해 추출되고 캡슐화됩니다.

함수로 정의된 객체에는 프로토타입 속성이 있고, 프로토타입 속성은 프로토타입 객체를 가리킵니다. 프로토타입 객체에는 생성자 속성이 있으며, 이 생성자 속성은 생성자 객체를 가리키며, 이 생성자 객체는 바로 함수 자체입니다.

의사 코드는 다음과 같습니다:

var 함수{

프로토타입: 프로토타입{

생성자: 생성자 == 함수

}

}함수와 프로토타입의 관계

js에서 함수를 생성하면 프로토타입 속성이 자동으로 생성됩니다. 이 속성은 프로토타입 객체를 가리킵니다. 함수 및 프로토타입 객체 함수를 가리키는 생성자 속성이 자동으로 획득됩니다.

예: 이전 프로토타입 모드를 예로 들어 객체를 생성합니다.

lt;script type="text/javascript"gt;

function Person( ){

}

Person.prototype.name="lxy"

Person.prototype.age=22; .prototype .job="소프트웨어 엔지니어";

Person.prototype.sayName=function(){

경고(this.name);

}< /p >

var lxy=new Person();

lxy.sayName();

var personA=new Person();

personA .sayName ();

Alert(lxy.sayName()==personA.sayName());//true

lt;/scriptgt;인스턴스와 프로토타입의 관계< /p>

생성자를 통해 생성자의 프로토타입 객체를 가리키는 속성(포인터)을 포함하는 인스턴스를 만듭니다.

예: Person 생성자 인스턴스 Person1과 Person2의 [[Prototype]] 특성은 모두 Person의 프로토타입을 가리킵니다.

참고: [[Prototype]] 연결은 인스턴스와 생성자 사이가 아니라 인스턴스와 생성자의 프로토타입 사이에 존재합니다.

이 포인터와 관련하여 ECMA-262에서는 [[Prototype]]이라고 합니다. [[Prototype]]에 액세스하는 표준 방법은 없지만 Firefox, Safari 및 Chrome은 각 객체에 __protp__ 속성을 지원합니다. . 다른 구현에서는 이 속성이 스크립트에 표시되지 않습니다.