3

继续这个问题,prototype.constructor 是做什么用的?

我认为只需这样做:

new some_object()

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

some_object.prototype.constructor = some_object;
4

2 回答 2

1

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

A.prototype = new B();

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

于 2013-07-26T16:34:51.787 回答
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

如果你传入fmakeNewObjectWithSameType上面的函数,它将构造一个Object,而不是一个Foo

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

于 2013-07-26T16:36:18.470 回答