このコンストラクタの概要jsのポイント

まず前菜来ます:

関数者(名){
            内部関数、外部アクセスできない、防止汚染や変数名の競合のために//変数のスコープ
            VAR名= 'ボブ';
            this.nameは名称。
            this.sayName =関数(){
                console.log(名);
            }
            this.changeName =関数(NEWNAME){
                名前= NEWNAME。
            }
        }
        //外部変数は、内部にアクセスすることはできません
        するvar A =新しい人();
        console.log(a.name)
奔走

まったくJSクラスがありません。最初の
Aのコンストラクタは以下目隠し以上のコンストラクタを参照していること、これはまた、手段、オブジェクトにこのポイント機能です。
疑いを作成するには、この時点Instanceオブジェクトのコンストラクタ。これを理解するために、我々は最初に理解する必要があります、何が起こっているか、すべての回でnew演算子をコンストラクタを呼び出す。
彼らは私をここに移動して、私はちょうど、答えはコンストラクタであると言うことができます。

実際には、コンストラクタと正常な機能は、基本的に2つの間の唯一の違いは差はありません。

この関数は、この区別は唯一の大会、区別しやすい、資産計上しました。あなたは本当にも何の問題定義のコンストラクタを小文字ないようにしたいので、違いはごくわずかです。

通常の関数と、さまざまな種類の呼び出し中に、new演算子を使用する必要のコンストラクタを呼び出しますが、new演算子を使用することはありません。だから、new演算子でコンストラクタと一般的な機能の違いは、私たちは今、新しい演算子を注意深く見てみましょう。
new演算子は、オブジェクト識別子を作成するときに何が起こるかと:

**ステップ1:Objectオブジェクトのインスタンスを作成します。
ステップ2:新たに生成されたインスタンス割り当てるオブジェクトコンストラクタを行います。
第三段階:実行コードコンストラクタ
第四の工程は:**新たに生成されたオブジェクトインスタンスを返し

注:元のコンストラクタウィンドウオブジェクトメソッド、直接ではなく新たなオペレータ起動すると、実行オブジェクトのコンストラクタは、ウィンドウにこの点で窓あります。今、new演算子の後に、新しく作成されたオブジェクトには、このポイント。このステップでは、理解することが重要です。
コンストラクタのコード実行、コードを見て:

機能人(){
this.name =「小型コールダー」。
= 22 VaRの年齢;
window.age = 22。
}
VARのP =新しい人()。
警告(p.name)//タイニーコールダー。
警告(p.age)//未定義。
警告(window.age)// 22。

あなたは新しい演算子を持つオブジェクトを作成すると、最初は、オブジェクトのインスタンスを作成し、コードを実行します。だから、まだもつれ、コンストラクタ定義された属性は、オブジェクトのインスタンスによって継承されますと、それはそう見ることができます:

VAR pは、新しいオブジェクトを()=;
p.name =「タイニーコールダー」。

オブジェクト、メソッド、プロパティを作成し、オブジェクトに追加するのが一般的です。それぞれがオブジェクトを作成する場合は、数行のコードを必要とし、それは間違いなく最悪です。new演算子、自動的に実行コンストラクタコード:これは、この対応で発生する必要があります。あなたが重複した属性冗長コードを追加するときに、私たちは保存することができます。これらの特性それで生成された新しいオブジェクトを追加するには?

第二のステップは、既に述べた:このインスタンスの新しい世代に割り当てられた実行オブジェクトのコンストラクタ。コンストラクタで、言うことのパラグラフに合わせて、自動的にthis.name =「タイニーコールダー」を実行した;ときp.name =「タイニーコールダー」を実行するのと同等;およびコンストラクタ
するvar年齢= 22;文を、これは、実行されますが、新しく作成されたオブジェクトには影響を与えません。window.age = 22;ステートメントが実行され、ウィンドウオブジェクトの属性を追加します。証拠として警告。

おそらく、ここで、新しい演算子の最初の3つのステップを理解し、それが重要な三つのステップです。しかし、この機能は、それのオブジェクトを返す方法ですか?私たちは、リターンと関連するすべての文を見ていません。これは、new演算子の最後のステップです:戻り値は、新たに生成されました。
で、新しく作成されたオブジェクト-関数は、明示的なreturn式なしで呼び出された場合、暗黙のリターンこのオブジェクト(オブジェクトのみを返します)。

今、このコードを見てみましょう。

機能人(){
this.name =「小型コールダー」。
} {返します。
}
VARのP =新しい人()。
警告(p.name)//未定義。

オブジェクトは、そのうちに作成されます。
実際には、

VARのP =新しい人();

VAR pは=新しいオブジェクト();
Person.apply(P)。

効果は同じです。

 

簡単な要約:

明示的な戻り、次の値:未定義、ヌル、ブール値、数および他の基本的なタイプ、および新しいスタイルの呼び出しのデフォルトの動作を置き換えることはありません。

しかし、明示的な戻り値は以下のとおり:{}、[]、正規表現は、日付、機能、新しいコールは、デフォルトの戻り値にこれを置き換えます。

我々は、すべてのオブジェクトが複雑な種類があり、後者は、見てきました。

 

関数の本体は、strictモードであれば、それはこのグローバルオブジェクトにバインドしません、例えば:

var  a =  function  (){ 'use strict' ; this .b =  'b' return  /111/g};
a();  // 直接报错
strictモードなので、デフォルトはこの時点では未定義

おすすめ

転載: www.cnblogs.com/jayfeng/p/12173439.html