이번에는 js 기생 결합 상속상속 사용법에 대해 자세히 설명하고, js 기생 결합 상속 사용 시 주의사항은 무엇인지 살펴보겠습니다.
조합 상속:function Person( uName ){ this.skills = [ 'php', 'javascript' ]; this.userName = uName; } Person.prototype.showUserName = function(){ return this.userName; } function Teacher ( uName ){ Person.call( this, uName ); } Teacher.prototype = new Person(); var oT1 = new Teacher( 'ghostwu' ); oT1.skills.push( 'linux' ); var oT2 = new Teacher( 'ghostwu' ); console.log( oT2.skills ); //php,javascript console.log( oT2.showUserName() ); //ghostwu결합 상속에는 단점이 있습니다. 상위 클래스의
constructor가 두 번 호출됩니다.
11행, 하위 클래스 프로토타입 을 호출합니다. 9행, 객체를 인스턴스화할 때 다시 호출하세요 생성자의 목적은속성을 복사하는 것입니다. 9번째 줄의 목적은 부모 클래스 프로토타입 객체(프로토타입)에 대한 메서드를 얻는 것입니다.
부모 클래스 생성자를 인스턴스화하지 않고도 부모 클래스의 프로토타입 객체에 대한 메서드를 얻을 수 있습니까? 물론, 기생 상속을 사용하여 상위 클래스 프로토타입 객체에 대한 메서드를 얻을 수 있습니다function Person( uName ){ this.skills = [ 'php', 'javascript' ]; this.userName = uName; } Person.prototype.showUserName = function(){ return this.userName; } function Teacher ( uName ){ Person.call( this, uName ); } function object( o ){ var G = function(){}; G.prototype = o; return new G(); } function inheritPrototype( subObj, superObj ){ var proObj = object( superObj.prototype ); //复制父类superObj的原型对象 proObj.constructor = subObj; //constructor指向子类构造函数 subObj.prototype = proObj; //再把这个对象给子类的原型对象 } inheritPrototype( Teacher, Person ); var oT1 = new Teacher( 'ghostwu' ); oT1.skills.push( 'linux' ); var oT2 = new Teacher( 'ghostwu' ); console.log( oT2.skills ); //php,javascript console.log( oT2.showUserName() ); //ghostwu사실, 직설적으로 말하면 기생 결합 상속은 빌린 생성자 + 상위 클래스의 얕은 복사본에 해당하는 프로토타입 객체입니다. 더 흥미로운 정보를 보려면 이 기사의 사례를 읽은 후 이 방법을 익히셨을 것입니다. PHP 중국어 웹사이트의 다른 관련 기사도 주목해 보세요! 추천 도서:
위 내용은 js의 기생 결합 상속 사용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!