この記事では、jsにおける継承の知識を主にテキストとコードの形で詳しく解説し、皆様のお役に立てれば幸いです。
コンストラクター、インスタンス、プロトタイプの関係を理解します。コンストラクターとインスタンスのプロトタイプはプロトタイプを指し、プロトタイプのコンストラクターはコンストラクターを指します。
サブクラスはメソッドと属性を再利用する必要があります。親クラスの
構築されたプロトタイプは親クラスのインスタンスを指し、サブクラスはこのインスタンスを通じて親クラスの属性とメソッドにアクセスでき、この関係は層ごとに徐々に形成されてプロトタイプチェーンを形成します。
function Super(name) { this.name = "name"; this.superproperty = true; } Super.prototype.getSuperName = function () { return this.name; } Super.prototype.getSuperproperty = function () { return this.superproperty; } function Sub(name) { this.name = name; this.subproperty = false; } //继承 Sub.prototype = new Super(); Sub.prototype.getSubName = function () { return this.name; } Sub.prototype.getSubproperty = function () { return this.subproperty; } var instance = new Sub("ctc"); console.log(instance.getSuperproperty());//true console.log(instance.getSubproperty());//false console.log(instance.getSuperName());//ctc console.log(instance.getSubName());//ctc
デフォルトのプロトタイプオブジェクト
すべてのインスタンスにはデフォルトのプロトタイプオブジェクトがあるため、super.prototype.prototypeは単にオブジェクトのプロトタイプを指しているだけです//继承 Sub.prototype = new Super();
Sub.prototype.getSubName = function () { return this.name; } Sub.prototype.getSubproperty = function () { return this.subproperty; }
欠点
親クラスのインスタンス属性はサブクラスのプロトタイプ属性となり、共有されます
作成 サブクラス インスタンスを作成する場合、すべてのインスタンスに影響を与えずにパラメータを親クラスに渡すことはできません。
コンストラクターの借用
function Super(name) { this.name = name; } Super.prototype.getSuperName = function () { return this.name; } function Sub(name) {
Super.call(this,name);
this.name = name;
サブクラスに、親クラスのインスタンスを指すサブクラスのプロトタイプを追加します。サブクラスのコンストラクターは親クラスの構造を借用するため、サブクラスの各インスタンスは独自の属性を持ちますが、メソッドは共有されます。
function Super(name) { this.name = name; this.superproperty = true; } Super.prototype.getSuperName = function () { return this.name; } function Sub(name) { Super.call(this,arguments); this.name = name; this.subproperty = false; } //继承 Sub.prototype = new Super();
// Sub.prototype.constructor = Sub;//如果此处未绑定,上一句重写了原型,Super的实例的constructor指向的自然是Super
Sub.prototype.getSubName = function () { return this.name;}varinstance = new Sub("ctc");
プロトタイプの継承
function object(o) { function F() { } F.prototype = o; return F; }
理解: F は関数でありオブジェクトであり、そのプロトタイプは object() によって受け入れられる o を指し、返される F はそのプロトタイプが o を指すオブジェクトです。
順序: Object.creat() は上記の関数を標準化します。つまり、Object.creat(o) も上記のコードを実装します
寄生継承
プロトタイプ継承に基づいて、このオブジェクトは強化されます
function creatAnother(o) { var clone = Object.create(o); clone.name = "ctc"; clone.sayname = function () { console.log(this.name); } return clone; }
function inherit(SubType,SuperType) { var prototype = Object.create(SuperType); prototype.constructor = SubType; SubType.prototype = prototype; }
Sub.prototype = new Super();
inherit(Sub,Super);
以上がjsにおける継承の知識を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。