javascript - 用另一个类属性/方法扩充所有对象
问题描述
想象一下我有两节课
class Point {
}
class EditablePoint extends Point {
// list of additional properties and methods
}
function edit(editablePoint) {
//
}
let point = new Point();
edit(point);
如何使用另一个类方法/属性来扩充所有对象?
任何prototype
黑客都对我不起作用。似乎我无法解决这个问题,而不是重新创建对象或手动分配类的附加属性或使用循环。我想要一些单行清洁解决方案。
免责声明:这看起来像一个我同意的反模式,但是我有大量的Point
s 数组,只有在非常罕见的情况下我才需要编辑它们,并且我想在不引入任何复制的情况下就地编辑它们,因为数组很大。
为什么我不喜欢让所有点都具有可编辑属性并希望将它们放在原型上:
- 每个对象实例都变大了,这是我最不想要的
- 它不能很好地与代码阅读器沟通
解决方案
您可以通过将prototype of 设置为prototype ofObject.assign
来添加属性和setPrototypeOf
添加方法,但是由于从您那里继承仍然会有方法。EditablePoint
Point
EditablePoint
Point
Point
class Point {
constructor() {
this.point = true;
}
foo() {
console.log('foo')
}
}
class EditablePoint extends Point {
constructor() {
super();
this.editable = true;
}
bar() {
console.log('bar')
}
}
function edit(editablePoint) {
Object.assign(editablePoint, new EditablePoint);
Object.setPrototypeOf(editablePoint, EditablePoint.prototype)
}
let point = new Point();
edit(point);
console.log(point)
point.foo();
point.bar();
推荐阅读
- applescript - AppleScript,在解析大型 XML 文件时收到“系统事件出错:连接无效。(-609)”
- scala - 在 Azure Blob 存储中编写 Parquet:“其中一个请求输入无效”
- c# - C# entityframework 6 修改children状态后如何保存children
- node.js - 图像未在 node.js 服务器 ubuntu 20,aws 的前端 react.js 上呈现
- python - 安装具有相应旧依赖项的旧 python 模块
- javascript - 用于递增的构造函数问题(反应 Javascript)
- r - 如何按班级创建条形图ro显示中位数
- react-native - 从 Async Storage 获取 i18n 语言
- google-sheets - 谷歌表格“COUNTIF”功能不显示多个条件
- vba - 在 MS access vba 中使用 Selenium 进行数据提取