1

尝试分别执行以下两个代码块时:第一个:

function Hallo() {

}
var some_obj = {
    name: "Fred",
    age: 23,
}
Hallo.prototype = some_obj;
var obj = new Hallo();
obj.constructor;

第二个:

 function Hallo() {

    }
    Hallo.prototype.name = 'Khanh';
    Hallo.prototype.age = 23;
    var obj = new Hallo();
    obj.constructor;

我在萤火虫的控制台中得到的结果是第一个是“Object{}”,第二个是“Hallo()”。虽然第二个很容易理解,但第一个真的很奇怪。因为据我所知,第一个 obj 对象的构造函数仍然相同(即 Hallo() 函数)。但是我得到了 Object() 函数。我真的不明白为什么。你能帮我吗?谢谢!

4

2 回答 2

2

原因是:

当你这样做var obj = new Hallo();

console.log(obj.constructor === Hallo.prototype.constructor); // true

在您的第一个示例中,您分配Hallo.prototype了一个新对象,其constructor为函数Object( function Object(){...})。

在您的第二个示例中,Hallo.prototype.constructor仍然是function Hallo() {...}

于 2012-10-17T03:05:46.577 回答
1

默认情况下prototype会得到一个指向构造函数的引用,在第一个函数中你将原型覆盖为some_obj,构造函数引用同时改变为some_obj的构造函数引用--Object的构造函数Object()

于 2012-10-17T03:04:46.703 回答