프로토 타입의 첫 번째 방법 :
// presising class function person () {this.heair = 'black'; this.eye = 'black'; this.skin = '노란색'; this.view = function () {return this.heair + ',' + this.eye + ',' + this.skin; }} // 서브 클래스 함수 man () {this.feature = [ 'beard', 'strong']; } man.prototype = new Person (); var one = new man (); Console.log (One.feature); // [ 'beard', 'strong'] console.log (one.heair); // black console.log (one.eye); // black console.log (One.Skin); // Yellow Console.log (one.view ()); // 검은 색, 검은 색, 노란색이 방법은 가장 간단합니다. 서브 클래스의 프로토 타입 속성 값을 상속 된 인스턴스에만 할당하면 상속 클래스 메소드를 직접 사용할 수 있습니다.
프로토 타입 속성은 무엇을 의미합니까? 프로토 타입은 프로토 타입입니다. 각 객체 (함수별로 정의)에는 객체 유형 인 기본 프로토 타입 속성이 있습니다.
이 기본 속성은 체인의 업 슬라이드 점검을 구현하는 데 사용됩니다. 즉, 객체의 속성이 존재하지 않으면 프로토 타입 속성이 속하는 객체를 통해 속성을 찾을 수 있습니다. 프로토 타입을 찾을 수 없다면 어떻게해야합니까?
JS는 프로토 타입 속성이 프로토 타입 속성에 속하는 객체를 자동으로 찾아서 속성이나 프로토 타입이 발견 될 때까지 프로토 타입을 통해 계속 색인되어 ( "정의되지 않은");
예를 들어, 위의 예에서 one.view () 메소드에서 JS는 먼저 한 인스턴스에 view () 메소드가 있는지 여부를 찾습니다. 없기 때문에 man.prototype 속성을 찾아 보이고 프로토 타입의 값은 사람의 인스턴스입니다.
이 인스턴스에는보기 () 메소드가 있으므로 호출이 성공적입니다.
두 번째 방법은 적용하는 것입니다.
// presising class function person () {this.heair = 'black'; this.eye = 'black'; this.skin = '노란색'; this.view = function () {return this.heair + ',' + this.eye + ',' + this.skin; }} // 서브 클래스 함수 man () {// person.apply (this, new array ()); person.apply (this, []); this.feature = [ 'beard', 'strong']; } var one = new man (); Console.log (One.feature); // [ 'beard', 'strong'] console.log (one.heair); // black console.log (one.eye); // black console.log (One.Skin); // Yellow Console.log (one.view ()); // 검은 색, 검은 색, 노란색참고 : 적용 매개 변수가 비어 있으면 매개 변수가 전달되지 않으면 새 배열 () 및 []를 통해 전달되고 Null은 유효하지 않습니다.
세 번째 유형은 Call+프로토 타입입니다.
// presising class function person () {this.heair = 'black'; this.eye = 'black'; this.skin = '노란색'; this.view = function () {return this.heair + ',' + this.eye + ',' + this.skin; }} // 서브 클래스 함수 man () {// person.apply (this, new array ()); person.call (this, []); this.feature = [ 'beard', 'strong']; } man.prototype = new Person (); var one = new man (); Console.log (One.feature); // [ 'beard', 'strong'] console.log (one.heair); // black console.log (one.eye); // black console.log (One.Skin); // Yellow Console.log (one.view ()); // 검은 색, 검은 색, 노란색통화 방법의 구현 메커니즘에는 하나가 더 필요합니다. prototype = new Person (); 왜?
통화 메소드는 메소드 교체만을 구현하고 객체 속성을 복사하지 않기 때문입니다.
이것이 Google Map API가 상속하는 방식입니다.
상기는 세 가지 상속 방법의 구현을 요약합니다. 그러나 각 방법에는 장점과 단점이 있습니다.
학부모 클래스가 다음과 같은 경우 :
// 부모 클래스 기능 직원 (머리, 눈, 피부) {this.heair = 머리; this.eye = 눈; this.skin = 피부; this.view = function () {return this.heair + ',' + this.eye + ',' + this.skin; }}서브 클래스 맨이 객체를 만드는 동안 모수를 모색 한 사람에게 모색을 전달하도록 서브 클래스를 어떻게 설계해야합니까? 프로토 타입의 상속 방법은 적용되지 않습니다.
적용 또는 호출 방법을 사용해야합니다.
// 방법을 적용 // 서브 클래스 기능 man (머리, 눈, 피부) {person.apply (this, [머리, 눈, 피부]); this.feature = [ 'beard', 'strong']; } // 호출 방법 // 서브 클래스 기능 man (머리, 눈, 피부) {person.call (this, hair, eye, skin); this.feature = [ 'beard', 'strong']; }그러나 적용 방법을 사용하는 데는 여전히 단점이 있습니다. 왜? JS에는 "인스턴스"인 매우 중요한 연산자가 있으며, 이는 특정 반대 방향이 특정 유형인지 비교하는 데 사용됩니다.
이 예에서는 사람 유형 일뿐 만 아니라 한 인스턴스도 사람 유형이어야합니다. 그러나 적용 방법을 상속 한 후에는 사람 유형에 속하지 않습니다.
이 모든 후에는 상속하는 가장 좋은 방법은 Call+프로토 타입 방법입니다. 그 후, 당신은 (베이스 클래스의 한 인스턴스)의 값이 사실인지 여부를 시도 할 수 있습니다.
세 번째 상속 방법에는 결함이 있습니다. 새 객체를 서브 클래징 할 때 부모 클래스에 필요한 매개 변수를 전달해야하며 상위 클래스의 속성 및 메소드가 재현됩니다. 다음 상속 방법은 완벽합니다.
기능인 (이름) {this.name = 이름; } person.prototype.getname = function () {return this.name; } 기능 중국어 (이름, 국가) {person.call (this, name); this.nation = 국가; } // 메소드 함수 상속 기능 상속 (서브 클래스, 슈퍼 클래스) {function f () {} f.prototype = superclass.prototype; subclass.prototype = new f (); Subclass.prototype.constructor = subclass.constructor; } 상속 (중국어, 사람); 중국어 .prototype.getnation = function () {return this.nation; }; var p = 새로운 사람 ( 'Shijun'); var c = 새로운 중국어 ( "liyatang", "China"); Console.log (P); // person {이름 : "Shijun", getName : function} console.log (c); // 중국어 {이름 : "liyatang", 국가 : "중국", 생성자 : 기능, getNation : 함수, getName : function} console.log (p.constructor); // function person (name) {} console.log (C.constructor); // 함수 중국어 () {} console.log (c 인스턴스 중국어); // true console.log (c 인스턴스 사람); // 진실위의 기사는 JS의 세 가지 상속 방법과 그 장단점에 대해 간략하게 설명합니다. 이것은 내가 당신과 공유하는 모든 콘텐츠입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.