如果缺少原型,为什么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"
答案 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);
};