javascript - 在 JavScript 类中使用原型存储属性而不是 getter
问题描述
所以,我正在通过 eloquent javascript 的平台游戏,在这个类中,我们为什么要size
在原型中存储属性?
描述说:
所有 Player 实例的 size 属性都是相同的,因此我们将其存储在原型上而不是实例本身上。我们本可以使用类似 getter 的类型,但是每次读取属性时都会创建并返回一个新的 Vec 对象,这将是一种浪费。(字符串是不可变的,不必在每次评估时都重新创建。)
但我无法理解。帮帮我!
class Player {
constructor(pos, speed) {
this.pos = pos;
this.speed = speed;
}
get type() { return "player"; }
static create(pos) {
return new Player(pos.plus(new Vec(0, -0.5)),
new Vec(0, 0));
}
}
Player.prototype.size = new Vec(0.8, 1.5);
另外,如果有人完成了游戏,谁能告诉我 x 和 y 坐标是如何在new Vec(0.8, 1.5)
,new Vec(0, -0.5)
和new Vec(0, 0)
. 我很难理解。谢谢!
解决方案
在原型上存储类似于其他语言(例如 Java)中的静态属性,这意味着只有一个 Vec 实例在所有 Player 实例之间共享。
当您访问任何播放器的属性时,iJavaScript 首先在播放器实例上查找常规属性,如果没有找到则查找类原型,然后查找父类原型,依此类推。
在这种情况下,它只是优化。不是为每个玩家创建 Vec 实例,而是在内存中只存在一个。换句话说,您可以将其视为恒定的。
推荐阅读
- vb.net - Visual Studio 2019 解决方案不为 Windows 服务项目构建 exe 文件
- powershell - 如何访问 PowerShell 脚本 (args) 中的最后一个参数
- python - pandas:仅从列中提取行的月日值
- r - R markdown:以颜色打印 data.table 或矩阵的选定条目
- c# - 如何修复“ConnectionString 属性尚未初始化”
- swift - react-native-receive-sharing-intent 每次都抛出 $_swiftUniformTypeIdentifiers & $_swiftCoreMIDI 无法解决的错误
- sql - 通过多列连接并避免 SQL 中的 OR 的最佳方法
- python - 在 discord.py 中检测消息来自哪个频道时出现问题
- javascript - 注销后 Azure AD SSO 未重定向
- math - 有没有办法在完整图中找到最小完整子图?