如果新实例对象未分配给变量会发生什么?

时间:2013-02-03 13:48:59

标签: javascript

如果不将新对象分配给变量会发生什么? 例如:

function MyConstructor() {
   // Codes here
};

new MyConstructor(); // new object instance is not assign to a variable

这段代码有危险吗? 它是否破坏了全局命名空间? 是否可以访问使用此样式创建的对象?

感谢。

3 个答案:

答案 0 :(得分:10)

  • 这段代码有危险吗? -
  • 它是否破坏了全局命名空间? -
  • 是否可以访问使用此样式创建的对象? -

正如您所说,调用new MyConstructor()将返回一个新对象,对它的引用将不会被存储,因此很快就会被垃圾收集器删除。 您唯一可以直接采取行动的机会是

new MyConstructor().someMethod();

......之后,你失去了机会,新的对象引用在外太空中丢失了:)

答案 1 :(得分:4)

除非构造函数本身在对象之外的某处保存对象的引用,否则对该对象的引用不会更长,垃圾收集器将删除它。

代码没有危险,它不会向全局命名空间添加任何内容,除非构造函数使其成为可能,否则无法访问该对象。

可以使用它的一个例子是构造函数注册对象本身:

var myHandlers = {};

function Handler(name) {
  myHandlers[name] = this;
}

new Handler("test");

使用类似的东西的缺点当然是更难以发现正在发生的事情。

答案 2 :(得分:1)

因为它在创建后没有引用它很快就会被垃圾收集。

仅供参考:80%至90%的时间创建对象的原因是以后可以引用和使用它们。