prototype.constructor的作用是什么



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

我认为,通过简单地做:

new some_object()

函数对象变成了构造函数。我不明白你为什么要这样设置。

some_object.prototype.constructor = some_object;

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

A.prototype = new B();

在此CCD_ 3。所以A的实例有一个来自B的构造函数。在赋值之后重置构造函数是一种很好的做法。

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

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重新分配给新对象后,可以通过手动重置Foo.prototype.constructor = Foo;来解决此问题。

最新更新