我对 JavaScript 并不陌生,但我永远无法理解关于它的原型继承的某些事情。
假设我们有父子“类”(创建对象的父子函数)。为了能够创建孩子,我们首先需要
Child.prototype = new Parent();
困难在于:通过将原型分配给 Child,我们又得到了一个对象 Parent,它在我们的代码中不做任何事情,只是与 Children 共享它的属性。但是仍然调用了 Parent 的构造函数!例如,如果 parent 表示某个 UI 对象,那么在我们的应用程序中,我们将拥有另外一个我们实际上并不想创建的对象!当然,这可能并且将会影响我们应用程序的状态。
我看到了一种解决方法:将某些参数传递给 Parent 构造函数,表明我们正在创建的对象仅用于原型,而不是一般用途,例如:
RedButton.prototype = new Button(FOR_PROTO_ONLY);
然后在 Parent 构造函数中决定是否做任何可显示的东西。但这是一个丑陋的解决方法!
在面向类的语言中,例如Java,我们根本没有这样的问题,因为继承并不假设调用任何额外的函数。我应该怎么做才能不在我的程序中使用这些丑陋的技术,并且仍然能够创建一个漂亮的原型层次结构?