JSは、オブジェクト指向プログラミング言語は、オブジェクトベースの言語ですされていません
クラスの量のオブジェクト指向プログラミング言語の概念の概念ではなく、オブジェクト指向言語JS JSがそうそこにはクラスはありませんが、オブジェクト指向のJSシミュレートすることができ、JSは、クラスのコンストラクタによってシミュレートされます
継承:
継承は、リレーションシップクラスとクラス間の関係であるJSクラスが、クラスのコンストラクタによってシミュレートして、継承によって減少することはできません
、変化点プロトタイプ親クラスの.prototype =新しいサブクラス:プロトタイプ継承によって
コンストラクタ名は.call(現在のオブジェクト、属性、プロパティ、属性)主にアドレス属性値の重複:ボローコンストラクタ継承
組成継承:ボロープロトタイプ継承+コンストラクタの継承。プロパティ値は、問題とリピート方式の解決するために
介してループを介して別のオブジェクトにオブジェクトのコピーのプロパティおよびメソッド:コピー継承
コンストラクタ名は.call(現在のオブジェクト、属性、プロパティ、属性)主にアドレス属性値の重複:ボローコンストラクタ継承
組成継承:ボロープロトタイプ継承+コンストラクタの継承。プロパティ値は、問題とリピート方式の解決するために
介してループを介して別のオブジェクトにオブジェクトのコピーのプロパティおよびメソッド:コピー継承
プロトタイプの継承:
// JS継承はプロトタイプによって達成することが 関数人(名前、年齢、性別){ この .nameの= 名; この .age = 年齢; この .sex = セックス; }; Person.prototype.eat = 関数(){ コンソール.logの( "私は食べる" ); }; Person.prototype.sleep = 関数(){ にconsole.log( "Iスリープ" ); }; Person.prototype.play = 関数(){ にconsole.log( "私たちは、ゲームをプレイしています。」); }; 関数の学生(スコア){ この .score = スコア; }; // 学生のポイントを変更するにはプロトタイプは====>生徒との人間関係が行われた Student.prototype = 新しい新しい人( 『guoguo』 18、 "M" ); Student.prototype.study = 関数(){ にconsole.log( "I学習" ); }; VARの STU = 新しい新しい学生(100 ) はconsole.log(stu.name) コンソール.logの(stu.age) にconsole.log(stu.sex) にconsole.log(stu.score); stu.study()。 stu.play()。 stu.eat(); stu.sleep();
原型継承欠陥:プロトタイプ実装継承変化するためポインティング直接継承されたプロパティは、プロパティ値を再呼び出し、オブジェクトのプロパティを再割り当てしただけで、同じで初期化しつつ
機能人(名前、年齢、性別、体重){ この .nameの= 名前; この .age = 年齢; この .sex = セックス。 この .weight = 重量; }。 Person.prototype.sayHi = 関数(){ にconsole.log( "你好" )。 }。 関数学生(スコア){ この .score = スコア。 }。 Student.prototype = 新しい人物( "guoguo"、20、 "男"、 "55キロ" )。 VAR STU1 =新しい学生(100 ); stu1.name = "LT" 。 stu1.age = 18 。 console.log(stu1.name、stu1.age、stu1.sex、stu1.weight、stu1.score)。 VaRの STU2 = 新しい学生(90 )。 console.log(stu2.name、stu2.age、stu2.sex、stu2.weight、stu2.score)。 VaRの stu3 = 新しい学生(80 )。 console.log(stu3.name、stu3.age、stu3.sex、stu3.weight、stu3.score)。
コンストラクタの継承を借りて:
機能人(名前、年齢、性別、体重){ この .nameの= 名前; この .age = 年齢; この .sex = セックス。 この .weight = 重量; }。 Person.prototype.sayHi = 関数(){ にconsole.log( "你好" )。 }。 機能学生(名前、年齢、性別、体重、スコア){ // 借用构造函数 Person.call(この、名前、年齢、性別、体重); この .score = スコア。 }。 VARSTU1 = 新しい生徒( "guoguo"、18、 "男"、 "55キロ"、100 )。 console.log(stu1.name、stu1.age、stu1.sex、stu1.weight、stu1.score)。 // stu1.sayHi(); VaRの STU2 = 新しい生徒( "LT"、18、 "男"、 "55キロ"、90 )。 console.log(stu2.name、stu2.age、stu2.sex、stu2.weight、stu2.score)。 VaRの stu3 = 新しい学生( "guoguolt"、18、 "男"、 "55キロ"、80 ); console.log(stu3.name、stu3.age、stu3.sex、stu3.weight、stu3.score)。
コンストラクタ継承された欠陥を借りて:メソッドを親カテゴリはできません継承
継承の組み合わせ:
原型継承+ボローコンストラクタの継承。resolveプロパティの値と重複する方法
関数人(名前、年齢、性別){ この .nameの= 名; この .age = 年齢; この .sex = セックス; }; Person.prototype.sayHi = 関数(){ にconsole.log( "2333" ); } ; 関数学生(名前、年齢、性別、音楽){ // ボローコンストラクタ:問題を解決するためのプロパティ値を繰り返し Person.callを(これは、名前、年齢、性別); この .score = スコア; }; // プロトタイプ点を変更します-継承 Student.prototypeは= 新しい新人(); Student.prototype.study = 関数(){ にconsole.log( "学习" )。 }。 VaRの STU = 新しい学生( "果果"、19、 "男"、100 ); console.log(stu.name、stu.age、stu.sex、stu.score)。 stu.sayHi(); stu.study(); VaRの STU1 = 新しい生徒( "guoguo"、19、 "女"、110 ); console.log(stu1.name、stu1.age、stu1.sex、stu1.score)。 stu1.sayHi(); stu1.study();
継承コピー:
オブジェクトのプロパティとメソッドを介してループを介して別のオブジェクトにコピーされます
// 継承されたコピー 機能を者(){}; Person.prototype.name = "guoguo"は、 Person.prototype.age = 20である。 Person.prototype.sex = "M" ; Person.prototype.Play = 関数(){ コンソール.logの(「プレイ」); }; VAR OBJ2 = {}; // プロトタイプで構成人プロトタイプ、プロトタイプオブジェクト、名前、年齢、性別であり、すべてのオブジェクトのプロパティとメソッドを再生 // 別のオブジェクトに通ってループを介してオブジェクトの属性およびメソッドのうち のために(VARキーでPerson.prototype){ OBJ2 [キー] =Person.prototype [キー]。 }。 console.dir(OBJ2)。 obj2.Play();
要約:
プロトタイプの役割:データの共有、継承。目的:メモリ空間を保存するには
原型継承:変化点の試作品
コンストラクタの継承を借り:主に重複した属性値の問題を解決するために
コンビネーションの継承:コンストラクタプロトタイプ継承+ボロー継承。resolveプロパティの値と重複する方法
継承コピー:をループを経由して別のオブジェクトにコピーされたオブジェクトのプロパティやメソッドを共有する必要があります