说明如下如果构造函数的方向参数等于direction . up,那么Bullet类的构造函数必须将dy字段初始化为-1。
如果构造函数的方向参数不等于direction . up,那么Bullet类的构造函数必须将dy字段初始化为1。
我的解决方案是
public Bullet(double x, double y, Direction direction) {
super(x, y);
setMatrix(ShapeMatrix.BULLET);
if (Direction direction == Direction.UP) {
dy = -1;
} else {
dy = 1;
}
但是正确的答案是
public Bullet(double x, double y, Direction direction) {
super(x, y);
setMatrix(ShapeMatrix.BULLET);
this.dy = direction == Direction.UP ? -1 : 1;
}
谁能给我解释一下为什么?this
在构造函数中将引用正在创建和返回的新对象。在第一个场景中:
dy = -1;
dy = 1;
这些值将被全局创建并附加到window对象上。理想情况下,你希望它们在你的对象上,这就是为什么this.dy
工作
您需要使用this
来引用对象的属性。dy
没有在构造函数的作用域中定义。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/constructorhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
在您的if statement
中,Direction direction
意味着您正在初始化一个变量
只要做if (direction == Direction.Up)
在试图访问构造函数或任何其他函数中的任何类变量时,需要使用this
关键字。您的代码也可以仅通过this
关键字访问dy
属性。像下面的
if (Direction direction == Direction.UP) {
this.dy = -1;
} else {
this.dy = 1;
}
另一方面,在提供的解决方案中,只有一个人将三元运算符用作if else
块的简写。