为什么构造函数不被接受?



说明如下如果构造函数的方向参数等于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块的简写。

最新更新