【问题标题】:What is the `constructor` property really used for? [duplicate]`constructor` 属性真正用于什么? [复制]
【发布时间】:2012-09-19 06:48:27
【问题描述】:

在 JavaScript 中,每个函数的原型对象都有一个不可枚举的属性 constructor,它指向函数 (EcmaScript §13.2)。它不用于任何本机功能(例如 instanceof 仅检查原型链),但是我们 are encouraged to adjust it 在覆盖函数的 prototype 属性以进行继承时:

SubClass.prototype = Object.create(SuperClass.prototype, {
    constructor: {value:SubClass, writable:true, configurable:true}
});

但是,我们(包括我)这样做只是为了清晰和整洁吗?是否有任何依赖constructor property 的实际用例?

【问题讨论】:

标签: javascript constructor prototype


【解决方案1】:

我真的不明白为什么 constructor 属性是它在 JS 中的样子。我偶尔会发现自己使用它来获取 IE

function Foo()
{
    this.name = 'Foo';
}
function Bar()
{
    this.name = 'Bar';
}
function Foobar(){};
Foo.prototype = new Foobar;
Foo.prototype.constructor = Foo;
Bar.prototype = new Foobar;
Bar.prototype.constructor = Bar;
var foo = new Foo();
var bar = new Bar();
//so far the set-up
function pseudoOverload(obj)
{
    if (!(obj instanceof Foobar))
    {
        throw new Error 'I only take subclasses of Foobar';
    }
    if (obj.constructor.name === 'Foo')
    {
        return new obj.constructor;//reference to constructor is quite handy
    }
    //do stuff with Bar instance
}

所以 AFAIK,构造函数属性的 “优点” 是:

  • 轻松从实例中实例化新对象
  • 能够将您的对象分组为某个类的子类,但仍然能够检查您正在处理的特定类型的子类。
  • 正如您所说:保持整洁。

【讨论】:

    【解决方案2】:

    我理解的构造函数属性是用来查看特定对象是由哪个函数构造函数创建或构造的。

    这是一个很好的例子: http://www.klauskomenda.com/code/javascript-inheritance-by-example/

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-14
    • 2011-08-19
    • 2010-11-05
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    相关资源
    最近更新 更多