純粋なコンストラクター関数があるとします (this.Bar = bar 以外は何も含まれていません)。
私はあなたが意味すると仮定するつもりです:
function MyConstructor(bar) {
this.Bar = bar;
}
(注: JavaScript で圧倒的に多いのは、プロパティ名は小文字で始まるという慣例です。したがってthis.bar
、ではありませんthis.Bar
。最初にキャップされた識別子は通常、コンストラクター関数用に予約されています。)
1) 別の関数から呼び出す場合、呼び出すときに呼び出し元関数の引数を直接渡すことができますか、それとも var myBar=new bar, myBar.Bar=thebar を実行する必要がありますか?ここで、バーは呼び出し元引数です?
それらを直接渡すことができます:
function foo(a, b, c) {
var obj = new MyConstructor(b);
}
2) すべての引数を取得しなくても、コンストラクターはインスタンス化されますか?
渡された引数の数は、JavaScript エンジンによってチェックされません。渡さない仮引数はundefined
、関数が呼び出されたときに値を持ちます。
function MyConstructor(bar) {
console.log(bar);
}
var obj = new MyConstructor(); // logs "undefined"
3) 引数の 1 つが一意であるかどうかを確認するにはどうすればよいですか。つまり、オブジェクトの他のインスタンスが問題のプロパティに対してこの値を持っていませんか? 具体的には、作成時に各オブジェクトに一意のインデックスを割り当てたいと考えています。もしかして配列?
通常、これはコンストラクターのスコープ内ではありません。しかし、はい、配列またはオブジェクトを使用してそれを行うことができます。
var knownBars = [];
function MyConstructor(bar) {
if (knownBars.indexOf(bar) !== -1) {
// This bar is known
}
else {
// Remember this bar
knownBars.push(bar);
}
}
もちろん、indexOf
検索に必要なものではない可能性があるため、他の方法Array.prototype
または独自のループを使用する必要がある場合があります。
もう 1 つの方法は、オブジェクトを使用することです。bar
これは、それが文字列または文字列に変換できるものであると仮定しています。
var knownBars = {};
function MyConstructor(bar) {
if (knownBars.indexOf(bar) !== -1) {
// This bar is known
}
else {
// Remember this bar
knownBars[bar] = 1;
}
}