【发布时间】:2018-05-16 13:32:04
【问题描述】:
假设我有两个班级
class Point {
}
class EditablePoint extends Point {
// list of additional properties and methods
}
function edit(editablePoint) {
//
}
let point = new Point();
edit(point);
如何使用其他类的方法/属性来扩充所有对象?
任何prototype hack 都不适合我。似乎我无法解决这个问题,而不是重新创建对象或手动分配类的附加属性或使用循环。我想要一些干净的解决方案。
免责声明:这看起来像是我同意的反模式,但是我有大量 Points 数组,只有在非常罕见的情况下我才需要编辑它们并我想在不引入任何复制的情况下就地执行此操作,因为数组非常庞大。
为什么我不喜欢让所有点都具有可编辑的属性并希望将它们放在原型上:
- 每个对象实例都会变大,这是我最不想要的
- 它无法与代码阅读器很好地通信
【问题讨论】:
-
在我看来,就像你试图用一个马鞍骑两匹马。因此,您希望所有
Point实例都具有EditablePoint的方法但您不想更改Point的原型或分配Point实例的方法? -
问题陈述不清楚,代码没有解释你想要做什么。什么是“其他对象”? 我有两个班级 - 其中哪个是您提到的“另一个班级”? 任何原型黑客对我都不起作用。 - 你到底尝试了什么,什么不起作用?
-
@MátéSafranka 我没有说明我不想改变原型。我想要。我只是不知道在对象已经创建后该怎么做
-
对不起,我误会了。答案即将到来。
-
@estus 问题已明确说明,不是吗? “如何使用其他类方法/属性来扩充所有对象?”
标签: javascript ecmascript-6 es6-class