什么是prototype.constructor?

时间:2013-07-26 16:24:09

标签: javascript

继续这个question,什么是prototype.constructor?

我只想这样做:

new some_object()

函数对象成为构造函数。我不明白为什么你需要以这种方式设置它。

some_object.prototype.constructor = some_object;

2 个答案:

答案 0 :(得分:1)

假设类A使用以下内容继承B

A.prototype = new B();

此后A.prototype.constructor == B。因此A的实例具有来自B的构造函数。在赋值后重置构造函数是一个好习惯。

答案 1 :(得分:1)

想象一个函数接受一个对象并构造该对象类型的新实例

function makeNewObjectWithSameType(typedObject) {
    return new typedObject.constructor();
}

为什么您可能需要constructor属性。

但是在定义构造函数时已设置constructor - 为什么还需要再次定义它?考虑以下情况:

function Foo() {
    // constructor logic...
}
Foo.prototype.constructor == Foo; // true by default

var f = new Foo();
f.constructor == Foo; // true!

但现在考虑覆盖Foo.prototype

function Foo() {
    // constructor logic...
}
Foo.prototype = {
    // new prototype; this is an `Object`
}
Foo.prototype.constructor == Foo; // FALSE! Foo.prototype is an Object
// thus, constructor == Object

var f = new Foo();
f.constructor == Foo; // FALSE! again, this is Object

如果您将f传递给我上面的makeNewObjectWithSameType函数,则会构建Object,而不是Foo

您可以在将Foo.prototype.constructor = Foo;重新分配给新对象后手动重置Foo.prototype来解决此问题。