Javascriptのnew()の詳しい説明

小云云
小云云オリジナル
2018-03-30 09:24:301869ブラウズ

他の高級言語と同様に、JavaScript にも new 演算子があり、クラスをインスタンス化し、メモリ内にインスタンス オブジェクトを割り当てるために使用されることがわかっています。 しかし、JavaScript ではすべてがオブジェクトです。なぜオブジェクトを生成するために new を使用する必要があるのでしょうか? この記事では、JavaScript の new の謎を探ります...

Person の新しいインスタンスを作成するには、new 演算子を使用する必要があります。

この方法でコンストラクターを呼び出すには、実際には次の 4 つの手順を実行します:

(1) 新しいオブジェクトを作成します。

(2) コンストラクターのスコープを新しいオブジェクトに割り当てます (つまり、これはこの新しいオブジェクト);

(3) コンストラクター内のコードを実行します (この新しいオブジェクトに属性を追加します);

(4) 新しいオブジェクトを返します。

新しい演算子

上記の基本概念を紹介し、新しい演算子を追加すると、JavaScript では、オブジェクトを作成するための従来のオブジェクト指向クラス + 新しいメソッドが完成します。このアプローチはと呼ばれます。疑似古典的。

上記の例に基づいて、次のコードを実行します


var obj = new Base();

このコードの結果は何ですか? Javascript エンジンで表示されるオブジェクト モデルは次のとおりです:


新しいものは正確に何をするのでしょうか?オペレーターは何をするのでしょうか? 実はとても簡単で、たった 3 つのことだけです。


var obj = {};
obj.__proto__ = Base.prototype;
Base.call(obj);

最初の行では、空のオブジェクト obj を作成します

2 行目では、この空のオブジェクトの __proto__ メンバーを Base 関数オブジェクトのプロトタイプ メンバー オブジェクトにポイントします

3 行目では、 Base 関数オブジェクトの this ポインタを obj に置き換えて、Base 関数を呼び出します。そのため、このメンバー変数の値は "base" になります。 。

Base.prototype オブジェクトにいくつかの関数を追加すると、どのような効果が得られますか?

たとえば、コードは次のとおりです:


Base.prototype.toString = function() {
 return this.id;
}

そして、 new を使用して新しいオブジェクトを作成すると、 __proto__ の特性に従って、 toString メソッドは、新しいオブジェクト。

コンストラクターでは、「クラス」のメンバー変数 (例: この例では id) を設定し、コンストラクター オブジェクトのプロトタイプでは、「クラス」のパブリック メソッドを設定します。したがって、クラスとクラスのインスタンス化の効果は、関数オブジェクト、JavaScript 固有の __proto__ およびプロトタイプ メンバー、および new 演算子を通じてシミュレートされます。

関連する推奨事項:

JavaScript の新しい演算子の詳細な説明

以上がJavascriptのnew()の詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。