1。コンストラクターとは何ですか
コンストラクターは、Java、C ++、PHPなどの一部のオブジェクト指向言語で非常に一般的です。 JavaScriptでは、コンストラクターは最初に通常の関数であり、新しい演算子を使用して呼び出され、特別なタイプのオブジェクトを生成できます。
コードコピーは次のとおりです。
//「ベンジャミン」はコンストラクターです
var Benjamin = new Benjamin( "Zuojj"、 "Male");
上記の例では、ベンジャミンはベンジャミンのオブジェクトです。それで、どのようにインスタンス化されますか?
コードコピーは次のとおりです。
関数Benjamin(ユーザー名、セックス){
this.username = username;
this.sex = sex;
}
var Benjamin = new Benjamin( "Zuojj"、 "Male");
// outputs:benjamin {sex: "Male"、username: "zuojj"}
console.log(ベンジャミン);
ご覧のとおり、「ベンジャミン」コンストラクターは、単に渡されたパラメーターを受け取り、このオブジェクトに割り当てるだけです。これは、コンストラクターが新しいオペレーターによって呼び出されると、コンストラクターのこのオブジェクトが新しい操作によって返されるオブジェクトに割り当てられるためです。
これは、上記のコードが次のことと同等であることを意味します。
コードコピーは次のとおりです。
ベンジャミン= {
「ユーザー名」:「Zuojj」、
「セックス」:「男性」
}
2.なぜコンストラクターを使用するのか
コンストラクターが使用される理由はいくつかあります。
1.コンストラクターを使用すると、これらすべてのオブジェクトを同じ基本構造を使用して作成できることを意味します。
2。コンストラクターを使用することは、「ベンジャミン」オブジェクトが「ベンジャミン」機能のインスタンスとして明示的にマークされていることを意味します
コードコピーは次のとおりです。
関数Benjamin(ユーザー名、セックス){
this.username = username;
this.sex = sex;
}
var Benjamin = new Benjamin( "Zuojj"、 "Male");
var ben = {
「ユーザー名」:「Zuojj」、
「セックス」:「男性」
}
//出力:true
console.log(ベンジャミンインスタンスオフベンジャミン);
//出力:false
console.log(ベンジャミンのインスタンス);
3.コンストラクターを使用すると、複数のインスタンスを共有するためのプロトタイプのパブリックメソッドを定義できることがわかります
コードコピーは次のとおりです。
関数Benjamin(ユーザー名、セックス){
this.username = username;
this.sex = sex;
}
benjamin.prototype.getName = function(){
this.usernameを返します。
}
var Benjamin = new Benjamin( "Zuojj"、 "Male");
var ben = new Benjamin( "Lemon"、 "Female");
//出力:Zuojj
console.log(benjamin.getname());
//出力:レモン
console.log(ben.getName());
3。注意すべきこと
1.新しいキーワード
コンストラクターをインスタンス化するときは、新しいキーワードを使用することを忘れてはなりません。新しいキーワードを使用するかどうかは、このオブジェクトに大きな影響を与えます。新しいキーワードがなければ、このオブジェクトはグローバルオブジェクト(ブラウザのウィンドウとノードのグローバル)を指します。したがって、コンストラクターを定義する場合、関数名の最初の文字を大文字にすることをお勧めします。
2。呼び出した関数に明示的な返品式がない場合、このオブジェクトは暗黙的に返されます。これは新しく作成されたオブジェクトです。それ以外の場合は、結果は影響を受けますが、返されたオブジェクトが
コードコピーは次のとおりです。
function bar(){
戻る2;
}
var bar = new bar();
//新しく作成されたオブジェクトを返します
//出力:bar {}
console.log(bar);
function test(){
this.value = 2;
戻る {
foo:1
};
}
var test = new test();
//返されたオブジェクト
// outputs:object {foo:1}
console.log(test);
注意を払う必要があるのは次のとおりです。
a)新しいbar()は、数字2のリテラル値ではなく、新しく作成されたオブジェクトを返します。
b)ここで取得した新しいテスト()は、以下に示すように、新しいキーワードを介して新しく作成されたオブジェクトではなく、関数によって返されるオブジェクトです。
コードコピーは次のとおりです。
function bar(){
戻る2;
}
var bar = new bar();
関数barn(){
新しい番号を返します(2);
}
var barn = new Barn();
//出力:true
console.log(bar.constructor === bar);
//出力:番号{}
console.log(納屋);
// OUPUTS:FALSE
console.log(barn.constructor === barn);
//出力:true
console.log(barn.constructor === number);
/ * ---------------------------------------- */
function test(){
this.value = 2;
戻る {
foo:1
};
}
var test = new test();
//出力:未定義
console.log(test.value);
// OUPUTS:1
console.log(test.foo);
上記はコンストラクターの要約です。初心者に役立つことを願っています。記事に不適切なポイントがある場合、私はそれらを批判し、修正したいと思っています。