【发布时间】:2014-02-07 01:32:33
【问题描述】:
我有一个关于子原型的问题。
例如,我想做类似的事情:
var Foo = function() { this.Bar.prototype.Foo = this.Baz.prototype.Foo = this };
Foo.prototype.is = "foo";
Foo.prototype.Iam = function() { return this.is };
Foo.prototype.Bar = function() {};
Foo.prototype.Bar.prototype.is = "bar";
Foo.prototype.Bar.prototype.Iam = function() { return this.Foo.is + this.is };
Foo.prototype.Baz = function() {};
Foo.prototype.Baz.prototype.is = "baz";
Foo.prototype.Baz.prototype.Iam = function() { return this.Foo.is + this.is };
var foo = new Foo();
var bar = new foo.Bar();
var baz = new foo.Baz();
console.log(foo.Iam()); // output: foo
console.log(bar.Iam()); // output: foobar
console.log(baz.Iam()); // output: foobaz
为了访问 Bar 和 Baz 中的 Foo 对象,我使用 this.Bar.prototype.Foo = this.Baz.prototype.Foo = this 扩展了 Bar 和 Baz 的原型。
我的问题是,是否存在一种更简单的方法来执行此操作并访问 Bar 和 Baz 中的主要对象 Foo,或者这是常见的方法吗?我想这样做的原因是创建一个主对象var x = new Foo(),并且所有子对象都可以访问主对象。
【问题讨论】:
-
您当前的方法似乎相当不错 - 每个类大约 1 条语句将其混合在一起。
-
这种“子原型设计”是一种实际被某些人使用的模式吗?
-
我看不出有任何理由对作为函数构造函数的 Bar 或 Baz 进行原型设计。我写下了我的变体以在 Foo 中包含 Bar 和 Baz
标签: javascript prototype