まず例を見てみましょう
function Me(name,age,job){ this.name = name; this.age = age; this.job = job; }
オブジェクトをインスタンス化する次の 2 つの方法の違いは何ですか?
var mefun1 = new Me('fei','20','it'); var mefun2 = Me('fei','20','it');
簡単に言うと
1 つ目はコンストラクター関数です。つまり、new 演算子を介してコンストラクター Function を呼び出して関数を作成します
2 番目のメソッドはインスタンス化ではなく、関数を呼び出して戻り値を変数に割り当てるだけです。
もう一度展開してください
JavaScript には実際のクラスはありませんが、JavaScript にはコンストラクターと新しい演算子があります。コンストラクターは、インスタンス オブジェクトのプロパティと値を初期化するために使用されます。任意の JavaScript 関数をコンストラクターとして使用できます。新しいインスタンスを作成するには、コンストラクターの前に new 演算子を付ける必要があります。
new 演算子は関数の実行コンテキストを変更し、return ステートメントの動作も変更します。実際、 new と コンストラクターの使用は、クラスを実装する従来の言語と非常に似ています。
// 实例化一个Me var alice = new Me('alice', 18, 'Coder'); // 检查这个实例 assert( alice instanceof Me );
コンストラクターの名前は通常、通常の関数と区別するために最初の文字を大文字にしたキャメルケースの名前を使用します。これは
です。
慣用的な用法。
// 不要这么做! Me('alice', 18, 'Coder'); //=> undefined
この関数は未定義のみを返し、実行コンテキストはウィンドウ (グローバル) オブジェクトであり、3 つのグローバル変数 name、age、job が誤って作成されます。コンストラクターを呼び出すときに new キーワードを失わないでください。
new キーワードを使用してコンストラクターが呼び出されると、実行コンテキストはグローバル オブジェクト (ウィンドウ) から、新しく生成されたインスタンスを表す空のコンテキストに変わります。したがって、this キーワードは現在作成されているインスタンスを指します。理解するのが少しわかりにくいですが、他の言語での組み込みクラス メカニズムの実装にも同じことが当てはまります。
デフォルトでは、コンストラクターが何も返さない場合、現在のコンテキストを返します。
それ以外の場合は、非プリミティブ型の値を返します。
以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。