관련 권장 사항: JavaScript 튜토리얼
(개념) 프로토타입 체인은 __proto__ 포인터를 통해 일부 프로토타입으로 구성된 연결 목록을 의미하며 프로토타입 체인에서 데이터를 공유하려는 객체를 서비스할 수 있으며 사용됩니다. JavaScript 상속 메커니즘을 구현합니다.
(프로토타입 체인 포인터) 프로토타입 체인에 관련된 포인터:
함수 A() { } a1 = 새로운 A()라고 놔두세요 a2 = 새로운 A()라고 놔두세요 a3 = 새로운 A()라고 놔두세요 // 이 코드 줄은 아래와 같은 프로토타입 체인을 생성합니다.
let A = { 시험: "" } a1 = Object.create(A)하자 a2 = Object.create(A)를 보자 a3 = Object.create(A)하자 // 이 코드 줄은 아래 표시된 프로토타입 체인에 해당합니다.
함수 A() { } a1 = 새로운 A()라고 놔두세요 a2 = 새로운 A()라고 놔두세요 a3 = 새로운 A()라고 놔두세요 // 이 코드 줄은 아래와 같은 프로토타입 체인을 생성합니다.
상속과 관련된 프로토타입 체인은 단순화된 다이어그램을 사용하여 분석할 수 있습니다.
// 기생 조합 모드를 사용하여 상속된 함수 구현 C() {} 함수 B() {} B.prototype = 새로운 C() 함수 A() {} A.prototype = 새로운 B() a1 = 새로운 A()라고 놔두세요 a2 = 새로운 A()라고 놔두세요 a3 = 새로운 A()라고 놔두세요
프로토타입 체인의 끝점은 null이며 이는 프로토타입 객체를 참조하지 않습니다
.프로토타입의 역학은 "객체 지향 프로그래밍"에 자세히 설명되어 있습니다. 주로 프로토타입을 다시 작성하고 수정하는 작업이 포함됩니다. 다음은 몇 가지 예입니다.
예 1 - 프로토타입 역학
var A = function() {}; A.prototype.n = 1; var b = 새로운 A(); A.프로토타입 = { n: 2, 남: 3 } var c = 새로운 A(); console.log(bn); // 1 console.log(bm); // 정의되지 않음 console.log(cn); // 2 console.log(cm); // 3
예시 2 - 프로토타입 및 프로토타입 체인 하단 체인의 동역학
var F = function() {}; Object.prototype.a = 함수() { console.log('a'); }; Function.prototype.b = 함수() { console.log('b'); } var f = 새로운 F(); 파(); // fb(); // b 속성이 존재하지 않습니다. Fa(); Fb(); // b
위에서 언급한 "상속을 포함하지 않는 프로토타입 체인 다이어그램"의 첫 번째 그림을 참조하면 다음과 같은 단순화된 참조 다이어그램 분석 문제를 그릴 수 있습니다.
예 3 - 프로토타입 역학 및 프로토타입 체인 하단 체인
기능 Person(name) { this.name = 이름 } p = new Person('톰'); console.log(p.__proto__) // Person.prototype console.log(Person.__proto__) // Function.prototype
예 4 - 프로토타입 역학 및 프로토타입 체인 하단 체인
var foo = {}, F = function(){}; Object.prototype.a = '값 a'; Function.prototype.b = '값 b'; 객체.프로토타입 = { a: "a 값" } 함수.프로토타입 = { b: "값 b" } console.log(foo.a); // 값 console.log(foo.b); // 정의되지 않음 console.log(Fa); // 값 console.log(Fb); // 값 b는
위에서 언급한 "상속을 포함하지 않는 프로토타입 체인 다이어그램"의 첫 번째 그림을 참조하여 다음과 같은 단순화된 참조 다이어그램 분석 문제를 그립니다. foo와 F는 선언 시 프로토타입을 바인딩하므로 스택 메모리에 저장된 포인터를 통해 힙 메모리에 저장된 프로토타입의 주소를 얻습니다. 먼저 프로토타입이 수정됩니다. 수정 작업은 힙 메모리의 프로토타입을 수정하며 F는 여전히 스택 메모리의 포인터를 통해 수정된 결과에 액세스할 수 있습니다. 두 번째 단계는 프로토타입을 다시 작성하는 것입니다. JS는 모두 "값 전송 작업"입니다. 프로토타입을 다시 작성한 후 먼저 힙 메모리에 새 공간을 열어 새 프로토타입을 저장한 다음 스택 메모리에 새 공간을 엽니다. 힙 메모리에 포인터를 저장합니다. 이때 foo와 F가 보유한 스택 메모리 포인터가 새로운 스택 메모리 포인터와 다르기 때문에 foo와 F는 다시 작성된 프로토타입에 접근할 수 없습니다.
관련 권장사항: JavaScript 학습 튜토리얼
위는 그림과 텍스트로 JavaScript 프로토타입 체인에 대한 자세한 설명입니다. 자세한 내용은 PHP 중국어 웹사이트의 다른 관련 기사를 참고하세요!