Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript构造函数_Javascript_Prototype - Fatal编程技术网

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
分配了一个新对象,该对象的
构造函数是function
object
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()构造函数创建的。所以它和你的答案不同。你能解释一下这种混乱吗?