我真的不明白为什么该constructor
属性是 JS 中的属性。我偶尔会发现自己使用它来获取 IE < 9 中的对象原型(如 Event 对象)。但是我确实认为它允许一些人模仿经典的 OO 编程结构:
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,构造函数属性的“优点”是:
- 轻松地从实例实例化新对象
- 能够将您的对象分组为某个类的子类,但仍然能够检查您正在处理的特定类型的子类。
- 正如你所说:保持整洁。