この記事では、プロトタイプベースの継承、コンストラクターの継承、寄生継承の 3 つの主要な方法に焦点を当てて、ES5 での継承のアプローチについて説明します。この記事では、各アプローチの長所と短所について説明し、コード例を提供します
ES5 では、いくつかのアプローチを通じて継承を実現できます:
これが最も一般的なアプローチです。 ES5では。これには、基本クラス (親) を作成し、基本クラスのプロパティとメソッドを継承する新しいオブジェクトを作成してそれを「サブクラス化」することが含まれます。これは、サブクラス オブジェクトの __proto__
プロパティを操作することによって行われます。__proto__
property of the subclass objects.
<code class="javascript">const Animal = { eat() { console.log("Eating..."); } }; const Dog = { __proto__: Animal, bark() { console.log("Woof!"); } }; const myDog = Object.create(Dog); myDog.eat(); // logs "Eating..." myDog.bark(); // logs "Woof!"</code>
This approach involves creating a base class constructor function and then extending it by defining a new constructor function that takes the base class constructor as an argument and adds additional properties and methods.
<code class="javascript">function Animal() { this.eat = function() { console.log("Eating..."); } } function Dog(name) { Animal.call(this); this.name = name; this.bark = function() { console.log("Woof!"); } } const myDog = new Dog("Luna"); myDog.eat(); // logs "Eating..." myDog.bark(); // logs "Woof!"</code>
This approach involves creating a temporary object that inherits from the base class and then uses that object to create the desired subclass. It is similar to prototype-based inheritance, but instead of modifying the __proto__
<code class="javascript">const Animal = { eat() { console.log("Eating..."); } }; const Dog = (function() { function AnimalProxy() {} AnimalProxy.prototype = Animal; const proxy = new AnimalProxy(); proxy.bark = function() { console.log("Woof!"); } return proxy; })(); const myDog = Object.create(Dog); myDog.eat(); // logs "Eating..." myDog.bark(); // logs "Woof!"</code>
__proto__
プロパティを変更する代わりに、基本クラスとサブクラスの間のブリッジとして機能する新しいオブジェクトを作成します。以上がES5で継承を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。