JavaScript の継承: Object.create と new
JavaScript では、さまざまなメソッドを通じて継承を実現できます。よく議論される 2 つのアプローチは、new キーワードと Object.create を使用することです。継承を検討するとき、利用可能なオプションの多さに気が遠くなることがあります。
JavaScript で継承を実現する最も一般的な方法を明確にするために、Object.create と new の違いを見てみましょう。
Object.create
Object.create は、別のオブジェクトを継承する新しいオブジェクトを作成するために使用されます。親オブジェクトのコンストラクター関数は呼び出されません。これは、親オブジェクトから特定のプロパティとメソッドを継承する新しいオブジェクトのみを作成する場合に便利です。
const baseModel = { property1: "value1", method1: function() {} }; const newModel = Object.create(baseModel);
この例では、newModel は、baseModel から property1 とメソッド 1 を継承します。
new
new キーワードは、クラスまたはオブジェクトのコンストラクター関数を呼び出し、その新しいインスタンスを作成しますクラスまたはオブジェクト。コンストラクター関数を呼び出して、特定のプロパティとメソッドを使用して新しいオブジェクトを初期化します。
class BaseModel { constructor(property1) { this.property1 = property1; } method1() {} } const newModel = new BaseModel("value1");
この例では、newModel は、property1 が「value1」に初期化された BaseModel クラスのインスタンスです。
正しいアプローチの選択
Object.create の選択new は、プロパティとメソッドを継承する新しいオブジェクトを作成する必要があるか、親オブジェクトのコンストラクター関数を呼び出す必要があるかによって異なります。
指定されたシナリオでは、RestModel または LocalStorageModel で拡張できる基本オブジェクト Model が必要です。 Model の新しいインスタンスを作成してそのコンストラクターを呼び出す必要がないため、Object.create (またはその shim) を使用するのが正しい方法です。
RestModel.prototype = Object.create(Model.prototype);
RestModel で Model コンストラクターを呼び出したい場合は、代わりに call() または apply() を使用してください:
function RestModel() { Model.call(this); // apply Model's constructor on the new object ... }
以上がObject.create と new: JavaScript の継承にどちらを使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。