Javascript构造函数
尝试分别执行以下两个代码块时: 第一个:Javascript构造函数,javascript,prototype,Javascript,Prototype,尝试分别执行以下两个代码块时: 第一个: 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.
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对象的构造函数仍然是相同的(即Hallo()函数)。
然而,我得到了Object()函数。
我真的不明白为什么。你能帮我吗?
谢谢大家! prototype将获得一个默认指向构造函数的引用,在将原型覆盖到某个对象的第一个函数中,构造函数引用同时更改为某个对象的构造函数引用--对象的构造函数对象()原因是: 当您执行
var obj=new Hallo()时代码>,然后
console.log(obj.constructor === Hallo.prototype.constructor); // true
在第一个示例中,您为Hallo.prototype
分配了一个新对象,该对象的构造函数是functionobject
(function object(){…}
)
在第二个示例中,Hallo.prototype.constructor
仍然是函数Hallo(){…}
在第一个示例中,您覆盖了整个prototype
,但在第二个示例中,您只添加了两个新属性。是的,我知道,但构造函数仍然是一样的,不是?我关心构造函数。constructor
在覆盖整个原型时被对象的构造函数覆盖。谢谢xdazz,我使用firebug测试了您的答案。是的,它完全按照你说的返回。因此,如果我这样做:var obj=new Hallo(),obj的构造函数实际上不是Hallo()函数,而是Hallo.prototype构造函数。然而,我读了一本书《面向对象的Javascript》,书中说:如果我这样做:var obj=new Hallo(),那么obj对象是由Hallo()构造函数创建的。所以它和你的答案不同。你能解释一下这种混乱吗?