JSモデル継承のいくつかの方法

2502 ワード

普段はあまり使わない知識も、時間が経つと曖昧になります.これはもう何回目か振り返ると原型継承の方式になります.いっそもう一度整理してみます.次の回を振り返ってみてもいいです.もし正しくないか、或いは補充しなければならないならば、歓迎のメッセージがあります.
ES 6の前に、JSが継承を実現する方式は一つだけではない.JavaScriptにおける継承メカニズムは明確に規定されているのではなく、模倣によって実現されているからである.
いくつかのよくある継承方法を整理します.
オブジェクトを詐称する-最も原始的な方法を使用する

function Person(name) {
  this.name = name;
  this.sayName = function () {
    console.log(this.name)
  }
}

function Student(age) {
  this.age = age;
  this.sayAge = function () {
    console.log(this.age)
  }
}
コンストラクタはただの関数なので、PersonコンストラクタをStudentの方法にして呼び出します.Studentには、Personの構造関数で定義された属性と方法が受信されます.
function Student(name,age) {
  //             (  )
  this.newMethod = Person;
  this.newMethod(name);
  //     Person    ,          
  delete this.newMethod;
  
  //                   ,        
  this.age = age;
  this.sayAge = function () {
    console.log(this.age)
  }
}
新しいインスタンステストの上の方法:
var per = new Person('  ')
var stu = nww Student('  ',13)

per.sayName() //      

stu.sayName() //      
stu.sayAge()  //    13
相手を詐称します.
call()を使用する方法は上記のようなオブジェクトと偽る方法と似ていますか?それとも上記の例を使用しますか?
function Person(name) {
  this.name = name;
  this.sayName = function () {
    console.log(this.name)
  }
}
// call()         this    ,              
function Student(name) {
  Person.call(this,name)
}

//    
var stu = new Studeng('  ')
stu.sayName()          //      
console.log(stu.name)  //      
コピー継承-for inを使用して、コピーを巡回します.
for inを使用して、継承する対象を遍歴して、属性と方法を逐一コピーして継承します.上の例について、一般的に、公共の方法を原型に置いて、次のようにします.
function Person(name) {
  this.name = name;
}

Person.prototype.sayName = function () {
    console.log(this.name)
  }

//                 
function Student(name) {
  Person.call(this,name)
}

//   for in     Person       
for(var key in Person.prototype) {
  Student.prototype[key] = Person.prototype[key]
}

//      ,    
var stu = new Student('  ')
stu.syaName() //      ,      Person      sayName   
原型引継ぎ
プロトタイプオブジェクトの任意の属性と方法は、そのクラスのすべてのインスタンスに渡されます.したがって、この機能を利用して継承機構を実現することができる.
function Person(name) {
  this.name = name;
}

Person.prototype.sayName = function () {
    console.log(this.name)
}

function Student(name) {
  Person.call(this.name)
}
//            
Student.prototype = new Person()

var stu = new Student('  ')
stu.sayName()  //      
他の方法がありますので、後で補充してください.
転載先:https://www.cnblogs.com/pingzx/p/10654163.html