継承の概要
JS の継承は非常に複雑なトピックであり、他のオブジェクト指向言語での継承よりもはるかに複雑です。他のほとんどのオブジェクト指向言語では、クラスからの継承に必要なキーワードは 1 つだけです。 JS でパブリック メンバーを継承するという目的を達成するには、一連の措置を講じる必要があります。 JS はプロトタイプ継承に属します。この柔軟性のおかげで、標準のクラスベースの継承またはより微妙なプロトタイプ継承を使用できます。 JS では、すべての継承がプロトタイプを通じて実行され、JS がオブジェクトに基づいて継承することは明らかです。
継承:
function Animal(name){ this.name = name; this.showName = function(){ alert(this.name); } } function Cat(name){ Animal.call(this, name); } var cat = new Cat("Black Cat"); cat.showName();
Animal.call(this) は、このオブジェクトの代わりに Animal オブジェクトを使用すると、Cat オブジェクトは Animal のすべてのプロパティとメソッドを持ちます。
多重継承:
function Class10() { this.showSub = function(a,b) { alert(a-b); } } function Class11() { this.showAdd = function(a,b) { alert(a+b); } } function Class2() { Class10.call(this); Class11.call(this); }
非常に簡単で、2 つの呼び出しを使用して多重継承を実現します
もちろん、js 継承 他にも方法がありますプロトタイプチェーンの使用など、これはこの記事の範囲外です。ここでは call の使用法についてのみ説明します。 call と apply について言えば、これら 2 つのメソッドは基本的に同じことを意味します。違いは、call の 2 番目のパラメーターは任意の型にできるのに対し、apply の 2 番目のパラメーターは配列または引数でなければならないことです。
JavaScript で単純な継承を実装する方法を紹介しましょう。
次の例では、従業員クラス Employee を作成します。これは、プロトタイプのすべてのプロパティを Person から継承します。
function Employee(name, sex, employeeID) { this.name = name; this.sex = sex; this.employeeID = employeeID; } // 将Employee的原型指向Person的一个实例 // 因为Person的实例可以调用Person原型中的方法, 所以Employee的实例也可以调用Person原型中的所有属性。 Employee.prototype = new Person(); Employee.prototype.getEmployeeID = function() { return this.employeeID; }; var zhang = new Employee("ZhangSan", "man", ""); console.log(zhang.getName()); // "ZhangSan
上記の継承の実装は非常に大まかであり、多くの問題があります:
Employee コンストラクターとプロトタイプを作成するとき (以下、クラスと呼ばれます)、パーソンがインスタンス化されますが、これは不適切です。
Employee のコンストラクターは親クラス person のコンストラクターを呼び出すことができないため、Employee コンストラクターで名前と性別属性が繰り返し割り当てられます。
Employee の関数は Person の同じ名前の関数を上書きしますが、オーバーロード メカニズムはありません (これは前のものと同じタイプの問題です)。
JavaScript クラスを作成する構文は断片化しすぎており、C#/Java の構文ほど洗練されていません。
実装のコンストラクター属性にポインティングエラーがあります。
上記は JavaScript の継承とその他の継承 javascript テクニックの内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。