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

jap*_*apt 5 javascript

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

function MyConstructor() {
   // Codes here
};

new MyConstructor(); // new object instance is not assign to a variable
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

jAn*_*ndy 11

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

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

new MyConstructor().someMethod();
Run Code Online (Sandbox Code Playgroud)

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

  • 构造函数中的`this`然后存储在其他地方就行了. (3认同)

Guf*_*ffa 5

除非构造函数本身在对象外部的某个地方保存了对该对象的引用,否则不再有对该对象的引用,垃圾收集器将删除它。

该代码并不危险,它不会向全局命名空间添加任何内容,并且除非构造函数使之成为可能,否则不可能到达该对象。

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

var myHandlers = {};

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

new Handler("test");
Run Code Online (Sandbox Code Playgroud)

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