JavaScriptのプロトタイプチェーン継承メカニズム

2785 ワード

prototype継承を実現するソース
  • JavaScriptがnewコマンドにより構成関数にインスタンスオブジェクトを作成した後、インスタンスオブジェクトは属性と方法を共有できませんでした.例えば
  • function Person (name) {
        this.name = name
        this.work = 'write code'
    }
    //   ,        :
    var p1 = new Person('suoling')
    var p2 = new Person('yaoyuan')
    //       work      ,      ,        。
    p1.work = 'sleep'
    console.log(p2.work)  // 'write code'
    
  • 以上のように、各インスタンスオブジェクトには、自分の属性と方法のコピーがあります.これはデータ共有ができないだけでなく、大きな資源の浪費でもあります.
    プロトタイプが現れます
  • newコマンド作成のインスタンスオブジェクトに欠点があるので、この属性はオブジェクト(以下「prototypeオブジェクト」という)を含み、すべてのインスタンスオブジェクトが共有する属性と方法をこのオブジェクトの中に置く.それらは共有する必要がない属性と方法を、コンストラクタに入れます.
  • 例のオブジェクトが作成されると、プロトタイプオブジェクトの属性および方法が自動的に参照されます.つまり、インスタンスオブジェクトの属性と方法は、2つに分かれています.1つはローカルで、もう1つは参照です.以下のとおりです
    function Person (name) {
        this.name = name
    }
    Person.prototype = { work: 'write code' }
    //   ,        :
    var p1 = new Person('suoling')
    var p2 = new Person('yaoyuan')
    console.log(p1.work)  // 'write code'
    console.log(p2.work)  // 'write code'
    //   ,work    prototype   ,          。     prototype  ,             。
    Person.prototype.work = 'sleep'
    console.log(p1.work)  // 'sleep'
    console.log(p2.work)  // 'sleep'
    
    次号に続く