如果不将新对象分配给变量会发生什么? 例如:
function MyConstructor() {
// Codes here
};
new MyConstructor(); // new object instance is not assign to a variable
这段代码有危险吗? 它是否破坏了全局命名空间? 是否可以访问使用此样式创建的对象?
感谢。
答案 0 :(得分:10)
正如您所说,调用new MyConstructor()
将返回一个新对象,对它的引用将不会被存储,因此很快就会被垃圾收集器删除。
您唯一可以直接采取行动的机会是
new MyConstructor().someMethod();
......之后,你失去了机会,新的对象引用在外太空中丢失了:)
答案 1 :(得分:4)
除非构造函数本身在对象之外的某处保存对象的引用,否则对该对象的引用不会更长,垃圾收集器将删除它。
代码没有危险,它不会向全局命名空间添加任何内容,除非构造函数使其成为可能,否则无法访问该对象。
可以使用它的一个例子是构造函数注册对象本身:
var myHandlers = {};
function Handler(name) {
myHandlers[name] = this;
}
new Handler("test");
使用类似的东西的缺点当然是更难以发现正在发生的事情。
答案 2 :(得分:1)
因为它在创建后没有引用它很快就会被垃圾收集。
仅供参考:80%至90%的时间创建对象的原因是以后可以引用和使用它们。