javascriptの継承-15

7502 ワード

引き継ぐ
継承とは、子類が父類の特徴と行為を継承し、子類の対象が父類と同じ行為をすることである.しかし、javascriptはclass、抽象類、インターフェースなどの抽象的な概念がないので、javascriptは対象だけです.jsの中では、対象と対象との間に継承関係が生まれるにはどうすればいいですか?
オブジェクトベースの継承
プロトタイプチェーンでは、オブジェクトに必要な属性や方法の参照が見つからない場合、内部属性の「プロトタイプ」が指すオブジェクトを探し続けています.同じように、必要な参照が見つからない場合は、その内部属性が指すオブジェクトを探し続けます.これを類推して、オブジェクトの原型がnullであるまで上に重ねていく一連のリンクをプロトタイプチェーンといいます.だからプロトタイプチェーンの中で私はやっとjsの中の継承が原型に基づいて実現するのです.
_.プロトデザイン
どのオブジェクトにも特殊な内部属性があり、オブジェクト間の内部リンクを作成します.バックグラウンドの開発経験があるなら、どうしてjsはこのように設計しますか?原型の対象を導入する意味は何ですか?なぜjavaや.netと同じようにcassをデザインしないのかなど迷っています.ここでオススメします. 阮一峰の『Javascript継承メカニズムの設計思想』
グループ引継ぎ
組み合わせ継承は、プロトタイプチェーンを使用してプロトタイプ属性と方法の継承を実現するという考え方が一般的であり、構造関数を借りることによって、インスタンス属性の継承を実現する.このように、プロトタイプ上の定義方法によって関数多重が実現されるとともに、各インスタンスに独自の属性があることを保証する.
 1  // 
 2     function Person(name, age) {
 3         this.name = name;
 4         this.age = age;
 5     }
 6     Person.prototype.SayName = function () {
 7         return this.name;
 8     };
 9     //  
10     function Parent(work, country, name, age) {
11         this.work = work;
12         this.country = country;
13         this.parentInfo = function () {
14             return 'hello    ,  :' + this.name +'     :' + this.work + ',   :' + this.country;
15         }
16         Person.call(this, name, age);//     
17     }
18     Parent.prototype = new Person();//  Parent     , parent prototype    Person    
19     var myParent = new Parent('manager', 'China', 'Joel', 22);
20     console.log(myParent.SayName());//Joel
21     console.log(myParent.parentInfo());//hello    ,  :Joel     :manager,   :China
22 
23     //  
24     function Child(work, country, name, age, sex) {
25         this.sex = sex;
26         this.childInfo = function () {
27             return 'hello    ,  :' + this.name + '     :' + this.work + ',      :' + this.country 
+ ', ' + this.sex; 28 } 29 Parent.call(this, work, country, name, age);// 30 } 31 32 Child.prototype = new Parent();// Child , Child prototype Parent 33 var myBaby = new Child('child', ' ', ' - ', 3, 'girl'); 34 console.log(myBaby.parentInfo());//hello :child, : 35 console.log(myBaby.childInfo());//hello , : - :child, : , girl
ここの基質は人で、子類は父、息子で、ここで原型の対象を書き直しておよび構造関数の中で父の類の立体構造の関数を呼び出して、しかもcallでthisの針を変えて、それによって息子に達して父を継承して、父は人を継承しました.
new操作子
重要なことはここで一回言います.前にプロトタイプチェーンでもう一回触れました.
MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/new の説明
newを使ってコンストラクタを呼び出すと、実行されるのに相当します.
1  var o = {};
2  o.__proto__ = F.prototype;//              ,             ;
3  F.call(o);
締め括りをつける
  • オブジェクト間のリンクは、[prototype]により関連付けられている
  • .
  • newオペレータキーポイント
  • prototypeは関数オブジェクトの属性です.プロトは、インスタンスの内部属性です.
  • プロトタイプチェーンは_に沿っています.プロトリンクを検索する