最初に、オブジェクトを定義し、オブジェクトのプロトタイプはobj._proto_です。 ES5のgetProtopeofメソッドを使用して、OBJのプロトタイプを照会できます。 OBJのプロトタイプがobject.prototypeに等しいかどうかを証明して、OBJのプロトタイプが存在するかどうかを証明します。答えは真実であるため、存在します。次に、foo()関数を定義し、すべての関数にはプロトタイプオブジェクト、つまり関数プロトタイプがあります。関数プロトタイプに属性を追加してから、新しいインスタンス化されたオブジェクトごとにその属性を共有できます(次の2つの例を詳細に紹介します)。
function foo(){} foo.prototype.z = 3; var obj = new foo(); obj.x = 1; obj.y = 2; obj.x //1obj.y //2obj.z // 3typeof obj.tosttring; //functionobj.valueof(); // foo {x:1、y:2、z:3} obj.hasownproperty( 'z'); //間違いここで、OBJのプロトタイプ(_Proto_)はFOO関数のプロトタイププロパティを指し、foo.prototypeのプロトタイプはObject.prototypeを指し、プロトタイプチェーンの終了はnullです。 HasownPropertyを通じて、ZプロパティがOBJにあるかどうかを確認できます。それはfalseを示しています。 OBJにはZプロパティはありませんが、そのプロトタイプチェーンを探すことで、foo.prototypeにあるため、obj.z = 3であり、最初のケースではobj.valueof()とtoStringは両方ともobject.prototypeにあることがわかりました。もちろん、次の特別なケースを除いて、
var obj2 = object.create(null); obj2.valueof(); //未定義
object.create()空のオブジェクトを作成し、このオブジェクトのプロトタイプはパラメーターを指します。次の包括的な例は、別のクラスを継承するクラスを実装する方法を示しています
//コンストラクターの人間の機能担当者(名前、年齢)を宣言{this.name = name; this.age = age;} person.prototype.hi = function(){console.log( 'hi、my name is' +this.name +'、私の年齢は' +this.age) ! ');}; function Student(name、age、classnum){person.call(this、name、age); this.classnum = classnum;} //空のオブジェクトを作成しますsustent.prototype = object.create(person.prototype); // constructorは、オブジェクトを作成する関数を指定します。 Student.prototype.constructor = suduten; sustent.prototype.hi = function(){console.log( 'hi、my name is is'+this.name+'、私の年齢は'+this.age+'、classnumです。 '+sub);}; //オブジェクトをインスタンス化するbosnvar bosn = new Student(' bosn '、27、' class 3 '); bosn.hi(); //こんにちは、私の名前はbosn、私の年齢は27歳で、私のクラスはクラス3bosn.legs_numです。 //2bosn.walk(); // bosnは歩いています!bosn.learns( 'math'); // bosnは数学を学んでいますコンストラクターの人と学生は、このポイントをインスタンス化されたオブジェクト(BOSN)にし、このオブジェクトのプロトタイプはコンストラクターのプロトタイプを指しています。
object.create()メソッドを使用して空のオブジェクトを作成し、このオブジェクトのプロトタイプはperson.prototypeです。これを書くことの利点は、StudNet.prototypeの属性をperson.prototype属性に影響することなく作成できることです。また、サブクラスの学生が基本クラスの人を継承するため、person.prototypeの元の属性を継承できることです。 person.prototype = sudutent.prototypeを直接書くと、両方とも同時にオブジェクトを指します。 student.prototypeに属性を追加する際に、同じ属性も個人のプロトタイプチェーンに追加されます。
コンストラクターの学生のコールメソッドの場合、この内部は、新しく作成された学生のインスタンス化されたオブジェクトを指し、コールを通して継承します。
Student.prototype.constructor = desuteでは、この文の意味は、学生がdustent.prototypeオブジェクトを作成する関数であることを指定することです。この文を書かないと、オブジェクトの機能はまだ人です。
継承を実装するには3つの方法があります。
function person(name、age){this.name = name; this.age = age;} function sustent(){} sustent.prototype = person.prototype; //1student.prototype = object.create(person.prototype); //2student.prototype = new Person(); // 3上記のJSプロトタイプチェーンと相続分析(最初の経験)は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。