新操作符在哪里创建新对象?

新操作符在哪里创建新对象?

问题描述:

我正在学习构造函数,并且遇到了关键字new新操作符在哪里创建新对象?

var obj = new myContructor();

我才知道,它创造了一个新的对象,设置它的原型constructor.prototype,设置其属性与this根据关键字,最后返回该对象。

现在,我很困惑它在哪里创建新的对象,因为内部存储器或其中的易失性的地方。

当我们说它返回那个对象时,它在var obj的位置创建一个新对象的副本,还是它将obj引用到创建新对象的任何位置?

+0

ThisBinding是JavaScript解释器在评估JavaScript代码时所维护的东西,就像一个特殊的CPU寄存器,它持有对对象的引用。每当仅在三种不同的情况中的一种情况下建立执行上下文时,解释器就更新ThisBinding。 检查[此](http://*.com/questions/3127429/how-does-the-this-keyword-work)链接。 – Shubham

+0

我关闭这个太宽泛,虽然这可能是一些职位的重复。在MDN中,您可以找到它的解释 – Jai

+0

该对象在由JavaScript运行时管理的堆上创建。与堆中的内存位置相对应的数字被返回(引用),因为对象通过“引用值”传递。这个数字(又名“参考”)被复制。复制整个对象的代价过高,而且不是你通常想要的。 – Ben

Javascript中幕后有很多事情要做,在你无法访问的内存中不断创建内存。至于你所关心的这一点的同时编写JavaScript代码:

  1. new创建对象并做了所有原型的东西被执行
  2. myConstructor(),并this内部功能设置为对象
    (换句话说:myContructor以对象作为上下文被调用)
  3. myConstructor完成后,对象被分配给变量obj作为所有这些的结果

关于什么myConstructor可以返回以及如何影响结果有一系列注意事项,但为简单起见,我们将忽略它。基本事件链是new创建对象→myConstructor将该对象视为thisobj“接收”此对象作为返回值new

当然,所有这些创建对象并将它传递到不同的地方都是由JavaScript引擎完成的,并且需要内存中某个对象的内部存储。

内部存储器或地方在那里它是挥发性

是的,当然。就像程序中的其他任何数据一样。

做我们的意思是说,它返回一个对象

你正在一个函数调用时。函数调用具有返回值。该对象是该函数调用的返回值。

它在VAR OBJ

它创建它在函数的位置创建新对象的副本,则它返回到它的基准(就像任何其他对象),并该引用存储在变量中,因为您使用了赋值。

+1

嘟nit nitpick:该对象不是直接函数调用的返回值(除非它是,当然)。这真的是'new'运算符的结果......:o) – deceze

+0

你是什么意思'创建对象内部功能'? –