此JavaScript中的内存中有哪些对象?

时间:2014-08-03 11:29:50

标签: 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` instance) and another instance of `MyCtor` acting as `v.__proto__`. So that is 3 objects in total.

1 个答案:

答案 0 :(得分:4)

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

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

在第二行之后,只有一个对象,即对象的实例。对象的__proto__属性不包含对象的另一个实例,它是对构造函数的原型对象的引用。

示例:

function MyCtor() {}

console.log(MyCtor.prototype);

var v = new MyCtor();

console.log(v.__proto__);
console.log(MyCtor.prototype === v.__proto__);

输出:

MyCtor { }
MyCtor { }
true

演示:http://jsfiddle.net/323bg/