>  기사  >  웹 프론트엔드  >  JavaScript 프로토타입에서 이해하기 더 어려운 개념

JavaScript 프로토타입에서 이해하기 더 어려운 개념

零下一度
零下一度원래의
2017-07-24 09:30:301429검색

프로토타입은 JavaScript에서 이해하기 어려운 개념입니다. 객체에는 "prototype" 속성이 있고, 함수 객체에는 "prototype" 속성이 있으며, 프로토타입 객체에는 "constructor" 속성이 있습니다.

1. 프로토타입에 대한 첫 소개
JavaScript에서는 프로토타입도 객체입니다. JavaScript 객체는 모두 "[[Prototype]]" 내부 속성을 포함합니다. 이 객체의 프로토타입입니다.
"[[프로토타입]]"은 개체의 내부 속성이므로 직접 액세스할 수 없습니다. 따라서 객체의 프로토타입을 편리하게 보기 위해 Firefox와 Chrome에서는 비표준(모든 브라우저에서 지원되지는 않음) __proto__ 접근자를 제공합니다(ECMA에서는 표준 객체 프로토타입 접근자 "Object.getPrototype(object)"를 도입했습니다). JavaScript 프로토타입 객체에는 프로토타입을 가리키는 모든 인스턴스를 생성하는 생성자에 해당하는 "생성자" 속성도 포함되어 있습니다. 2. 규칙

JavaScript에서 각 함수는 생성자로 사용될 때 프로토타입 속성을 갖습니다. 인스턴스가 있으면 이 함수의 프로토타입 속성 값이 모든 객체 인스턴스에 프로토타입으로 할당됩니다(즉, 인스턴스의 `__proto__` 속성이 설정됩니다). 즉, 모든 인스턴스의 프로토타입이 함수를 참조합니다. 프로토타입 속성. (****`오직 함수 객체에만 이 속성이 있습니다!`****)


new 프로세스는 세 단계로 나누어집니다


?

var p = new Person('Zhang San',20) ;

1.var p={};

2. p._proto_=Person.prototype;, 객체 p의 __proto__ 속성을 Person.prototype

3으로 설정합니다. Person.call(p,"Zhang San",20); 생성자 Person을 호출하여 p를 초기화합니다. call/apply 사용 관련
예:

다음과 같은 시나리오가 있습니다
Man 확장 Person 확장 Object
var a = new Man();
a의 프로토타입은 Man.prototype입니다
Man.prototype도 마찬가지입니다. 그런 다음 자체 프로토타입인 Person.prototype
을 가리키는 포인터도 있습니다. 마찬가지로 Person.prototype의 프로토타입은 Object.prototype
Object.prototype도 프로토타입이라는 점만 제외하면 객체입니다. null이면 프로토타입 체인의 끝에 도달한 것입니다
a의 프로토타입 링크는 아래와 같습니다

한 가지를 기억하세요. object는 생성자의 프로토타입입니다. 위 그림의 a 개체를 예로 들면 다음과 같습니다. a.__proto__ === Man.prototype

위 내용은 JavaScript 프로토타입에서 이해하기 더 어려운 개념의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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