1.プロトタイプチェーンを継承します
1 // 1.プロトタイプ継承チェーン 2 / * 3つの 短所:すべての属性が共有され、パラメータを渡すことはできません 4。 * / 5。 機能人(名前、年齢){ 6。 この .nameの= 名前 7。 この .age = 年齢 8。 } 9。 = Person.prototype.sayName()=> { 10 はconsole.log(この.nameの) 。11 } 12は 、関数マン(名){ 13である 14 } 15 Man.prototype = 新しい新規人物() 16 Man.prototype.name =「zhangsan " 17 VaRの zhangsan = 新マン( 'zhangsan' ) 18はconsole.log(zhangsan.name)// zhangsan
2.コンストラクタ継承(古典的な継承)
// コンストラクタの継承(古典の継承) / * 利点:あなたは、パラメータ渡すことができます 短所:オブジェクトを作成し、コンストラクタ内のすべてのメソッドをするたびに作成され、対応する方法、大幅に無駄なメモリ * / 機能Perent(名前、年齢、性別) { この .nameの= 名前 この .age = 年齢 この .sex = セックス この .sayName = 関数(){ にconsole.log(この.nameの) } } 関数の子(名前、年齢、性別){ Perent.call(本、名前、年齢、性別) } のlet子 = 新しい新しい子( 'リージ'、18 'M'、である) にconsole.log(子供) // 子{名: 'リージ'、年齢:18、性別: '男'、sayName:[機能]}
3.組み合わせの継承(+コンストラクタプロトタイプチェーン)
// 3.合成モード(プロトタイプチェーンコンストラクタ+) / * これは、プロトタイプチェーンコンストラクタそれぞれの利点を最大限に活用し、最も一般的に使用されるJSメソッド継承される * / 関数動物(名前、年齢){ この。 =名前名前 この .age = 年齢 } Animal.prototype.sayName = 関数(){ にconsole.log(この.nameの) } 関数キャット(名前、年齢、色){ Animal.call(これは、名前、年齢) 本。 =カラー色 } Cat.prototype = Animal.prototype // プロトタイププロトタイプ猫動物向け Cat.prototype.constructor =猫 // 将猫的构造函数指向猫 ましょう猫= 新しい猫( 'xiaobai'、3、 '白' ) はconsole.log(猫)//猫{名: 'xiaobai'、年齢:3、色: '白' } cat.sayName() // xiaobai
4.es6方法は継承されました
// 4.es6继承方法の クラスごと{ コンストラクタ(名前){ この .nameの= 名 } sayName(){ にconsole.log(この.nameの) } } クラスソンあたり{延び コンストラクタ(名前、年齢){ スーパー(名前) この .age = 年齢 } } 息子ましょう = 新しい息子( 'zhangsanを'、18 ) にconsole.log(息子)// 息子{名: 'zhangsan'、年齢:18} son.sayName()// zhangsan