新しいオブジェクトを変数に割り当てないとどうなりますか?例えば:
function MyConstructor() {
// Codes here
};
new MyConstructor(); // new object instance is not assign to a variable
このコードは危険ですか?グローバル名前空間を壊しますか?このスタイルで作成されたオブジェクトにアクセスすることは可能ですか?
ありがとう。
新しいオブジェクトを変数に割り当てないとどうなりますか?例えば:
function MyConstructor() {
// Codes here
};
new MyConstructor(); // new object instance is not assign to a variable
このコードは危険ですか?グローバル名前空間を壊しますか?このスタイルで作成されたオブジェクトにアクセスすることは可能ですか?
ありがとう。
正しく述べたように、呼び出しnew MyConstructor()
は新しいオブジェクトを返します。そのオブジェクトへの参照は保存されないため、ガベージコレクターによって非常に迅速に削除されます。その新しいオブジェクトに作用する唯一のチャンスは直接です
new MyConstructor().someMethod();
...その後、チャンスを失い、新しいオブジェクト参照が宇宙空間で失われます:)
コンストラクター自体がオブジェクトへの参照をオブジェクトの外部のどこかに保存しない限り、オブジェクトへの参照は長くならず、ガベージコレクターはそれを削除します。
コードは危険ではなく、グローバル名前空間に何も追加されません。また、コンストラクターが可能にしない限り、オブジェクトに到達することはできません。
使用できる場所の例は、コンストラクターがオブジェクト自体を登録する場合です。
var myHandlers = {};
function Handler(name) {
myHandlers[name] = this;
}
new Handler("test");
もちろん、そのようなものを使用することの欠点は、何が起こっているのかを追跡するのが難しいことです。
作成後に参照がないため、すぐにガベージコレクションされます。
参考までに:オブジェクトを80〜90%の確率で作成する理由は、後で参照して利用できるようにするためです。