javascript:如果缺少原型,为什么obj.constuctor.name会给出2个不同的结果?

时间:2014-07-04 15:01:33

标签: javascript classname

如果缺少原型,为什么obj.constuctor.name会给出2个不同的结果?我如何获得构造函数名称而不是" Object"如果它有原型呢?

// Class with prototype
function Foo(a) {
    this.a = a;
}
Foo.prototype = {
    bar: function () {
        console.log(this.a);
    }
};
f=new Foo(1)
f.constructor.name
"Object"

// Class with no prototype
function Fooee(a) {
    this.a = a;
}

f1=new Fooee(1)
f1.constructor.name
"Fooee"

2 个答案:

答案 0 :(得分:2)

您正在通过将其原型重新定义为对象Foo()来更改{}的构造函数。

你应该这样做:

Foo.prototype.bar = function () {
   console.log(this.a);
}

答案 1 :(得分:1)

函数“prototype属性的初始值包含constructor。你可以尝试一下:

function Foo() {
}

assert(Foo.prototype.constructor === Foo);

当您用对象覆盖整个prototype时,您正在破坏该属性。 ({}.constructor === Object。)只需为其分配新属性:

Foo.prototype.bar = function () {
    console.log(this.a);
};