>웹 프론트엔드 >JS 튜토리얼 >js의 기생 결합 상속 사용에 대한 자세한 설명

js의 기생 결합 상속 사용에 대한 자세한 설명

php中世界最好的语言
php中世界最好的语言원래의
2018-04-18 16:41:392178검색

이번에는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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