如何解决javascript中难以理解的对象重新分配
我一直在看这个游戏引擎的例子,我真的不明白为什么它会重新分配对象,我用 java 编写代码并且我正在学习 javascript,这可能是一个概念错误。
示例 https://blacksmith2d.io/Docs/Examples/Arcade-Physics/CollisionEvents
onassetsLoaded() 事件他正在设置对象属性,然后在下面再次重新分配。
this.arcade = arcade;
this.circle = circle;
this.Box = Box;
我也不明白 if 语句的这一部分
!this.circle
解决方法
关于这些声明:
this.arcade = arcade;
this.circle = circle;
this.box = box;
在该代码块的前面,出现在右侧的所有变量都被定义为局部变量(方法 onAssetsLoaded
的局部变量):
const arcade = ...
const circle = ...
const box = ...
所以你想知道的赋值实际上是将引用从局部变量复制到实例变量(即属性)。这是在 onAssetsLoaded
调用完成后不会丢失此信息所必需的。
关于这个表达:
!this.circle
非运算符 (!
) 可用于任何表达式。当操作数为“假”时,它的计算结果为 true
。在 JavaScript 中,undefined
、null
、0
、""
、NaN
等值被视为“虚假”,而所有对象都被视为“真实”。这里用来检测 this.circle
没有被赋值,也就是说 onAssetsLoaded
还没有被调用,而 this.circle
仍然是 undefined
。
Java 和 Javascript 就像汽车和地毯https://stackoverflow.com/a/245068/1897495 :-)。你在Java中学到的知识是不能直接转用的。
与 Java 不同,Javascript 中对对象属性的访问是显式的:必须使用 this.
。
从同一个类调用方法时也是如此(你需要使用 this.
)
class SomeClass {
constructor() {
this.param1 = 42;
}
localAndParameter(param1) {
console.log(this.param1); // prints "42"
console.log(param1); // prints "666"
}
localAndGlobal() {
console.log(this.param1); // still "42"
console.log(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.log(obj.newProperty); // prints "undefined"
obj.someMethod();
console.log(obj.newProperty); // prints "23"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。