프로토 타입 체인에 대해 이야기하기 전에 먼저 사용자 정의 기능과 기능 사이의 관계가 무엇인지 이해하고 생성자, 프로토 타입 및 인스턴스 간의 불가분의 관계는 무엇입니까? 실제로 모든 기능은 기능의 인스턴스입니다. 생성자에는 프로토 타입 속성 프로토 타입이 있으며, 이는 객체이기도합니다. 그러면 프로토 타입 객체에 생성자 특성이 있으며, 이는 생성자를 가리킨다. 인스턴스 객체에는 프로토 타입 객체를 가리키는 _proto_ 속성이 있으며이 속성은 표준 속성이 아니며 프로그래밍에 사용할 수 없습니다. 이 속성은 내부적으로 브라우저 사용에 사용됩니다.
// _proto_ 함수에는 속성 프로토 타입이 있습니다. 이 함수에 의해 생성 된 객체는 기본적으로 속성에 연결됩니다. // 프로토 타입과 _proto___의 관계는 객체 관점에서 나오고 프로토 타입은 생성자 관점에서 나온 것입니다.
아래에서 그림을보고 말합시다.
1. 생성자, 프로토 타입 및 인스턴스 간의 관계
+객체
②+기능+개체+배열
이것들을 이해 한 후에는 프로토 타입 체인이 무엇인지 논의 해 봅시다. 무뚝뚝하게 말하면 실제로 유한 인스턴스 객체와 프로토 타입 사이에 형성된 유한 체인이며 공유 속성 및 상속을 구현하는 데 사용됩니다. 다음으로 말할 코드를 살펴 보겠습니다.
var obj = new Object (); 객체는 프로토 타입 객체와 프로토 타입 객체 obj._proto _._ proto _._ proto _._ proto__proto_도 프로토 타입 객체를 갖는 프로토 타입 객체입니다. 객체의 프로토 타입 객체가 계속 찾고 있으며 null // 프로토 타입 체인 예제 var arr = []; arr -> array.prototype-> object.prototype-> null var o = new Object (); o-> object.prototype-> null; 함수 foo1 () {this.name1 = '1';} 함수 foo2 () {this.name2 = '2';} foo2.prototype = new foo1 (); function foo3 () {this.name = '3';} foo3.pootype = new foo2 (); var foo3 = new foo3 (); foo3 (foo3);다음은 상속 문제입니다.
2. 상속
1) 프로토 타입 상속
기능 동물 (이름) {this.name = 이름; } function tiger (color) {this.color = color; } // var tiger = new Tiger ( 'Yellow'); // console.log (tiger.color); // console.log (tiger.name); // undefined // tiger.prototype = new Animal ( 'tiger'); // 일방적 인 object.prototype.name = '큰 호랑이'; // 두 번째 방법 var tiger = new Tiger ( 'Yellow'); console.log (tiger.color); Console.log (tiger.name);여기에는 두 가지 주요 문제가 있다는 점은 주목할 가치가 있습니다. ∎ 상위 유형의 참조 유형은 모든 인스턴스에서 공유됩니다.
2) ES5는 상속을 구현하기 위해 Object.Create () 메소드를 제공합니다
- - - 호환 // shim shim 함수 create (obj) {if (object.create) {return object.create (obj); } else {function foo () {} foo.prototype = obj; 새로운 foo ()를 반환합니다. }}이 방법은 ES5의 새로운 기능으로, 실제로 복사 및 상속입니다.
3) 상속을 복사하십시오
var obj = {}; obj.extend = function (obj) {for (var k in obj) {this [k] = obj [k]; }}4) 빌린 생성자 상속 - 빌린 생성자의 프로토 타입의 구성원은 빌리지 않습니다.
함수 동물 (이름) {this.name = name;} 함수 마우스 (별명) {동물성 (this, '마우스'); this.nickname = nickname;} var m = new 마우스 ( 'jerry'); console.log (m.name); console.log (m.nickname);기존 문제 : 프로토 타입 상속에서 매개 변수를 전달하는 문제를 해결할 수 있지만 부모 유형의 프로토 타입 객체의 멤버 (속성 및 메소드)는 상속 될 수 없습니다.
5) 조합 상속 프로토 타입 객체는 동적입니다
기능인 (이름) {this.name = name;} person.prototype.howname = function () {console.log (this.name);} 함수 학생 (이름, age) {person.call (this, name); this.age = age; age indud.prototype = new person (); whening.prototype.contructor = student; student.prototyp.showage = function () {console.log (this.age);} new Student ( 'Zhang San', 12); stu.showname (); stu.showage ();[프로토 타입 상속 + 빌린 생성자 상속] 특성은 인스턴스 당 속성의 한 사본이며 메소드가 공유된다는 것입니다.
[요약] 이를 매우 거친 문장으로 만들기 위해, 소위 프로토 타입 체인은 어머니를 찾는 행동의 방법이며, 사람들은 인간이 태어나고 괴물은 악마에 의해 태어난다는 것을 이해할 수 있습니다. 프로토 타입 체인에는 실제로 하나의 핵심이 있습니다 : 속성 공유 및 독립적 인 제어. 객체 인스턴스에 독립적 인 속성이 필요한 경우 모든 관행의 본질은 객체 인스턴스에서 속성을 만드는 것입니다. 너무 많이 생각하지 않으면 프로토 타입의 속성을 덮어 쓰는 데 직접 필요한 독립 속성을 직접 정의 할 수 있습니다. 요컨대, 프로토 타입 상속을 사용할 때는 프로토 타입의 속성에 특별한주의를 기울여야합니다. 이들은 전신에 영향을 미치는 모든 존재이기 때문입니다. 이제 가장 일반적인 방법은 조합 모드입니다.
1. 프로토 타입 체인
1) 생성자, 프로토 타입 및 인스턴스 간의 관계
constructors 생성자는 객체 (객체의 인스턴스) 인 속성 프로토 타입을 가지고 있습니다. 프로토 타입 객체에는 생성자 속성이 있으며,이 속성은 프로토 타입 객체가 속한 생성자 함수를 가리 킵니다. 인스턴스 객체에는 _PROTO_ 속성이 있으며 생성자의 프로토 타입 개체를 가리 킵니다. 비표준 속성이며 프로그래밍에 사용할 수 없습니다. 브라우저 자체에서 사용됩니다. 2) 프로토 타입과 _proto_의 관계
prototype은 생성자의 특성입니다
②_proto_는 인스턴스 객체의 속성입니다
- 둘 다 같은 물체를 가리 킵니다
[요약] i) 함수는 또한 개체이며, 객체는 반드시 기능이 아닙니다.
ii) 대상의 본질 : 비정규 키 값 쌍 세트; 키 값 쌍의 값은 모든 데이터 유형의 값일 수 있습니다.
iii) 물체는 컨테이너이며 컨테이너에는 (특성 및 방법)
3) 속성 검색
① 객체의 멤버에 액세스 할 때 먼저 객체에 존재하는지 여부를 찾습니다.
current 객체가없는 경우 생성자의 프로토 타입 객체에서 찾으십시오.
prototype 객체를 찾을 수없는 경우 프로토 타입 객체의 프로토 타입을 찾으십시오.
④ 객체 프로토 타입 객체의 프로토 타입이 null이라는 것을 알고 있습니다.
2. 기능
- 모든 기능은 기능의 인스턴스입니다
① 로컬 객체 : 호스트 환경 (브라우저) - 오브젝트, 배열, 날짜, 기능, 오류, 번호, 문자열, 부울 포함
② 수학 및 글로벌 (JS의 글로벌 변수 인 Window)을 포함한 내장 객체 및 사용시 새로운 것이 필요하지 않습니다.
HOST 객체 - 사용자 정의 객체, dom, bom을 포함한 객체
위의 내용은 귀하에게 소개 된 JS 프로토 타입 체인을 이해하는 방법에 대한 전체 설명입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!