ホームページ >ウェブフロントエンド >jsチュートリアル >Javascript における new() の動作の詳細な説明

Javascript における new() の動作の詳細な説明

亚连
亚连オリジナル
2018-05-28 14:25:211478ブラウズ

JavaScript では、new 演算子はどのように機能しますか? それはコンストラクターの戻り値をどのように変更し、これは何を指すのでしょうか?次の記事では、JavaScript での new() の動作に関する関連情報を紹介します。必要な方は参照してください。

はじめに

他の高級言語と同様に、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 演算子を通じてシミュレートされます。

上記は私があなたのためにまとめたものです。

関連記事:

vueコンポーネントと再利用について詳しく解説

vueはvue-i18nを使って国際化実装コードを実現

Vueの無限ロードvue-infinite-loadingメソッド

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

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