ES6仕様は、それを定義していない前に、jsは実際にはクラスのコンストラクタです。(引用符で囲まれたブログパーク:heweiquan)
1.単純なクラス。
機能人(){ this.name = '张三'。 this.age = 20。 } VARのP =新しい人()。 警告(p.name)
プロトタイピングによる2.実装の継承。(プロトタイプコンストラクタと内部チェーンを増大させる方法)
人関数(){ this.name = 'ジョン・ドウ'; / *属性* / this.age = 20である。 this.run =関数(){ アラート(this.name + '運動'); } } //プロトタイプチェーン上記特性は、複数のインスタンスコンストラクタによって共有されない 。Person.prototype.sex =「M」 Person.prototype.work =関数(){ アラート(「職場」this.name +); } VARのP =人新しい新(); //alert(p.name); //p.run(); p.work()。
3.クラスの静的メソッド
人関数(){} Person.getInfo =関数(){ アラート( '静的メソッドI'); } //は静的メソッド呼び出し Person.getInfo()。
4.es5実現以下継承するオブジェクトの内部を装いました、
人関数(){ this.name = 'ジョン・ドウ'; / *属性* / this.age = 20である。 this.run =関数(){/ *メソッドの例* / アラート(this.name + '運動')。 } } Person.prototype.sex = "M"; Person.prototype.work =関数(){ アラート( '職場' this.name +); } // Personクラスは、Webベースの組成物のプロトタイプチェーン+ポーズオブジェクトの遺伝パターンを継承します Web機能(){ Person.call(この); / *オブジェクトマスカレード継承* / } VAR新しい新しいウェブW =(); //w.run();//オブジェクトはポーズコンストラクタ関数のプロパティとメソッドを継承することができここで、それが実行されている )(w.workを; //プロトタイプチェーンのプロパティとメソッド上記の継承ではなく、それはここで説明します
継承継承のプロトタイプチェーン内の5.es5
人関数(){ this.name = 'ジョン・ドウ'; / *属性* / this.age = 20である。 this.run =関数(){/ *メソッドの例* / アラート(this.name + '運動')。 } } Person.prototype.sex = "M"; Person.prototype.work =関数(){ アラート( '職場' this.name +); } // Personクラスは、Webベースの組成物のプロトタイプチェーン+ポーズオブジェクトの遺伝パターンを継承します Web機能(){} Web.prototype新しい新しい=人(); //プロトタイプチェーン継承 VAR新しいウェブW新=(); //w.run();//プロトタイプチェーン継承:継承コンストラクタ内部それが実行されているプロパティとメソッド、 w.workを(); //プロトタイプチェーンは、上記の属性およびメソッドを継承することがあり、それはここで正常動作であります
6.プロトタイプ継承チェーンの問題
人関数(名前、年齢){ this.name =名; / *属性* / this.age =年齢; this.run =関数の方法(){/ *例* / アラート(this.name + '運動')。 } } ウェブ(名前、年齢){}関数 )新しい新しい=人(Web.prototypeと、 VAR新しい新しいウェブW =( '趙のSi'、20である); w.run(); //インスタンス化サブクラスないとき親クラスに渡すパラメータ、それはここで与えられます
人関数(名前、年齢){ this.name =名; / *属性* / this.age =年齢; this.run =関数の方法(){/ *例* / アラート(this.name + '運動')。 } } ウェブ(名前、年齢)機能{ Person.call(これは、名前、年齢); //インスタンスサブクラスポーズパラメータオブジェクト継承は、親クラスに移すことができる } Web.prototype新しい新しい=人(); VAR新しい新しい= Wウェブ( '趙Siの'、20); w.run(); //ここでエラーなし
8.オブジェクトプロトタイプ継承チェーンをポーズする別の方法+
関数人(名前、年齢){ this.name =名。/ *属性* / this.age =年齢; this.run =関数(){/ *实例方法* / アラート(this.name + '在运动')。 } } 関数ウェブ(名前、年齢){ Person.call(この、名前、年齢)。 } Web.prototype = Person.prototype。 VARワット=新しいWeb( '赵四'、20); w.run();
関数関係は、オブジェクトのオブジェクトのプロトタイプ、プロトタイプチェーン。
まず、名前が示すように、コンストラクタで何か物事コンストラクタ、理解しています。コードを思い出してください。
従業員の機能(名前、仕事、生まれ)
{
this.name =名;
this.job =仕事;
this.born =生まれ;
}
VAR =新しい新しいビルの従業員( "ビル・ゲイツ"、 "エンジニア"、1985);
はconsole.log (bill.constructor); //関数を説明する従業員ストリング。
console.log(ビル.__ proto__); {//コンストラクタ:fEmployee(名前、職業、生まれ)、プロト__ __:オブジェクト}
にconsole.log(bill.prototype); //未定義 (コンストラクタを含む)のみの機能のみプロパティがプロトタイプ。通常のオブジェクトなしプロトタイプを(指定されていない場合)
はconsole.log(従業員.__ proto__ === Function.prototype)// trueに
結論は以下のとおりです。
1):私たちは、Jsの中で、唯一の3で、新しい場所を使用することが可能であることを知っています。
ここでは最初の場所です。新しい+コンストラクタ。第2の状況は、新しい+機能()であり、第三の場合は、新しい+オブジェクト()です。
それにコンストラクタオブジェクト・コンストラクタ。
コンストラクタFunction.prototypeオブジェクトは、関数であります
オブジェクトは、ObjectコンストラクタでのObject.prototype
2):オブジェクトの__proto__プロトタイププロパティは、コンストラクタにアクセスするために使用されます。任意のオブジェクトは、__proto__プロパティを持っています。
次のように特定の関係は以下のとおりです。