尝试分别执行以下两个代码块时:
第一个:
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;
我在firebug的控制台中得到的结果是第一个是“ Object {}”,第二个是“ Hallo()”。
虽然第二个很容易理解,但是第一个确实很奇怪。因为据我所知,第一个中obj Object的构造函数仍然相同(即Hallo()函数)。
但是我得到了Object()函数。
我真的不明白为什么。你能帮我吗?
谢谢!
最佳答案
原因是:
当您执行var obj = new Hallo();
时
console.log(obj.constructor === Hallo.prototype.constructor); // true
在第一个示例中,您为
Hallo.prototype
分配了一个新对象,该对象的constructor
是函数Object
(function Object(){...}
)。在第二个示例中,
Hallo.prototype.constructor
仍为function Hallo() {...}