【发布时间】:2020-08-11 06:23:50
【问题描述】:
那么,我正在浏览 eloquent javascript 的 platform game 并且在这个类中,我们为什么要在原型中存储 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);
另外,如果有人完成了游戏,谁能告诉我在new Vec(0.8, 1.5)、new Vec(0, -0.5) 和new Vec(0, 0) 中的 x 和 y 坐标是如何获取的。我很难理解。谢谢!
【问题讨论】:
-
你不明白什么?它不是在每个对象中存储一个 size 属性,而是在原型中存储一次,所有实例都继承它。
-
我不明白这一点:> 我们本可以使用类似 getter 的类型,但是每次读取属性时都会创建并返回一个新的 Vec 对象,这很浪费。
-
每次调用
new Vec()都必须构造一个新的Vec对象。由于它永远不会改变并且所有实例都是相同的,这将是多余的。 -
返回字符串字面量没有开销,因为 JavaScript 编译器知道不需要构造任何内容。所以有
get type的函数就OK了。 -
get size() { return new Vec(0.8, 1.5); }
标签: javascript class oop prototype