Я смотрел примеры этого игрового движка, и я действительно не понимаю, почему он переназначает объект, я кодирую на java и изучаю javascript, это может быть ошибка концепции.
пример https://blacksmith2d.io/Docs/Examples/Arcade-Physics/CollisionEvents
onassetsLoaded() он устанавливает свойства объекта, а затем снова переназначает их ниже.
this.arcade = arcade;
this.circle = circle;
this.box = box;
также я не понимаю эту часть оператора if
!this.circle



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Java и Javascript так же похожи, как автомобиль и ковер https://stackoverflow.com/a/245068/1897495 :-). Знания, которые вы приобрели в Java, не могут быть перенесены напрямую.
В отличие от Java, доступ к свойствам объектов в Javascript явный: использование this. обязательно.
То же самое происходит при вызове методов из одного класса (нужно использовать this.)
class SomeClass {
constructor() {
this.param1 = 42;
}
localAndParameter(param1) {
console.info(this.param1); // prints "42"
console.info(param1); // prints "666"
}
localAndGlobal() {
console.info(this.param1); // still "42"
console.info(param1); // prints 123
}
callMethods() {
this.emptyMethod(); // this works
emptyMethod(); // This would raise an exception if called
// "emptyMethod" is undefined or something like that
}
emptyMethod() {
}
}
const param1 = 123;
const obj = new SomeClass();
obj.localAndParameter(666);
obj.localAndGlobal();
Также язык динамичен.
Свойства могут быть добавлены к объектам в любое время, а не только при объявлении/создании.
class SomeClass {
constructor() {
// no properties created.
}
someMethod() {
// everything is dynamic! I can create a property here
this.newProperty = 23;
}
}
const obj = new SomeClass()
console.info(obj.newProperty); // prints "undefined"
obj.someMethod();
console.info(obj.newProperty); // prints "23"
Я думаю, что путаница с OP просто происходит из-за непонимания того, что this.something и something не совпадают в Javascript (что имеет место в Java)
да, вы правы, я думал о java, поэтому я не понимаю эту концепцию
Об этих утверждениях:
this.arcade = arcade;
this.circle = circle;
this.box = box;
Ранее в этом блоке кода все переменные, встречающиеся справа, были определены как локальные переменные (локальные для метода onAssetsLoaded):
const arcade = ...
const circle = ...
const box = ...
Таким образом, задания, которые вас интересуют, на самом деле копируют ссылки из локальных переменных в переменные экземпляра (т.е. свойства). Это необходимо, чтобы не потерять эту информацию после завершения вызова onAssetsLoaded.
Что касается этого выражения:
!this.circle
Оператор not (!) можно использовать в любом выражении. Он оценивается как true, когда операнд «ложный». В JavaScript такие значения, как undefined, null, 0, "", NaN, считаются «ложными», в то время как все объекты считаются «истинными». Здесь он используется для обнаружения того, что this.circle не было присвоено правильное значение, т. е. это будет означать, что onAssetsLoaded еще не вызывался, а this.circle все еще был undefined.
использование этого в javascript означает, что локальная переменная применяется глобально, это правильно? , я думал в java.
this — это объект. Он может получить свойства. this.a = 1 присвоит значение свойству объекта this. Если у вас также есть переменная с именем a, знайте, что это не синоним this.a. Если эта переменная a является локальной, и вы хотите не потерять эту информацию после того, как она выйдет за пределы области видимости, вам нужно скопировать ее во что-то, к чему можно получить доступ из другого места, например this.a. Можно многое сказать о this, так как он не всегда действует так же, как в Java. Посмотрите очень познавательный Как работает это ключевое слово.
хорошо, я проверяю этот URL, в любом случае я даю ваш ответ как правильный.
так что в основном, если он не использует это, когда добавлял эти свойства, почему он переназначает объект?