此JavaScript中内存中存在哪些对象?

此JavaScript中内存中存在哪些对象?,javascript,Javascript,给定以下代码,在第1行和第2行之后的内存中有哪些用户定义的对象 function MyCtor() {} //At this point a single user-defined object exists, the constructor function `MyCtor` var v = new MyCtor(); //Here in addition to the constructor function defined above we have `v` (a `MyCtor`

给定以下代码,在第1行和第2行之后的内存中有哪些用户定义的对象

function MyCtor() {}

//At this point a single user-defined object exists, the constructor function `MyCtor`

var v = new MyCtor();

//Here in addition to the constructor function defined above we have `v` (a `MyCtor` instance) and another instance of `MyCtor` acting as `v.__proto__`. So that is 3 objects in total.

在第一行之后有两个对象。有函数对象,有函数的原型对象

(好吧,在解析代码时函数已经创建,因此对象在代码开始执行之前就存在了。更正确的说法是第一行导致两个对象存在。)

在第二行之后,只剩下一个对象,即对象的实例。对象的
\uuu proto\uu
属性不包含该对象的另一个实例,它是对构造函数的prototype对象的引用

例如:

function MyCtor() {}

console.log(MyCtor.prototype);

var v = new MyCtor();

console.log(v.__proto__);
console.log(MyCtor.prototype === v.__proto__);
输出:

MyCtor { }
MyCtor { }
true

演示:

因此,在第1行之后,在不运行函数本身的情况下创建了MyCtor的实例。我可以用任何其他方式直接实现此行为吗?双下划线显示不是标准属性,并且不能保证它在所有浏览器中都存在。@Ben:不,在第二行创建一个实例之前,没有任何MyCtor的实例。函数的原型对象不是
MyCtor
@Guffa的实例,而是
function Foo(){};prototype
返回
Foo{}
,表示
Foo
的一个实例正在充当构造函数的原型,不是吗?@Ben:显示它时看起来像一个实例,但不是。首先,需要调用构造函数来创建适当的实例,但事实并非如此。其次,如果它是对象的一个实例,那么它的
\uuuu proto\uuuu
引用将是它自己,但它是
对象的原型