Javascript new()が最後に何をしたのかを説明してください。

1 Star2 Stars3 Stars4 Stars5 Stars (まだ評価されていません)
Loading...

序文

他の高水準言語と同様に、javascriptには新しい演算子もあります。このnew演算子は、クラスをインスタンス化してメモリ内のオブジェクトのインスタンスを割り当てるために使用されます。 しかし、javascriptでは、すべてがオブジェクトです。オブジェクトを生成するためにnewを使用するのはなぜですか? この記事では、javascriptの新機能の謎を解説します…

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__メンバを基本関数オブジェクトのプロトタイプメンバオブジェクト

3行目では、Base関数オブジェクトのthisポインタをobjに置き換えてBase関数を呼び出して、idメンバ変数をobjオブジェクトに割り当てます。このメンバ変数の値は "base"です。call関数の使用法。

Base.prototypeのオブジェクトに関数を追加するとどうなりますか?

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


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

次に、newを使用して__proto__機能に従って新しいオブジェクトを作成すると、toStringメソッドに新しいオブジェクトのメソッドとしてアクセスすることもできます。 だから我々は見た:

コンストラクタでは、 'class'メンバ変数(例ではid)を設定し、子オブジェクトプロトタイプに 'class'のpublicメソッドを構築します。 したがって、関数オブジェクトとJavascript固有の__proto__とプロトタイプメンバーとnew演算子を使用して、クラスとクラスのインスタンス化の効果をシミュレートします。

要約

上記の内容はすべてこの記事の内容ですが、この記事の内容には皆さんの研究や仕事の参考となる価値があることを祈っています。メッセージ交換を残すことができる質問がある場合は、スクリプトホームのサポートに感謝します。


1 Star2 Stars3 Stars4 Stars5 Stars (まだ評価されていません)
Loading...
      この投稿は審査処理中  | 元のサイトへ