我正在使用 Traceur 来编写一些 future 的 javascript,这是我在某些类(class)中拥有的功能
create() {
this.game.physics.startSystem(Phaser.Physics.ARCADE);
this.segmentcache = new SegmentCache(this.game);
this.segments = new Segments(this.game);
this.segments.cache = this.segmentcache;
this.segments.seek(3);
this.guy = new Guy(this.game, 140 + 8, 80);
this.guy.anchor.set(0.5, 1.0);
this.game.add.existing(this.guy);
this.game.camera.x = 100;
this.ticks = 0;
this.cross = 0;
}
当然,与任何传统的 javascript 代码一样,它到处都覆盖着 this 关键字。来自 Java 等,当我不需要指定时,在类中引用字段时必须指定它是非常不自然的。
有没有办法让 Traceur 以与 Java 相同的方式解释类? (即未指定时自动插入,等等)
最佳答案
据我所知,没有。
在 Java、C#、C++ 等中,这是编译器的一个特性,而不是执行。这意味着它是隐式完成的,编译器所做的是将正确的地址放入 this
并以正确的方式引用变量。大多数编译器都有一个规则,如果你有一个同名的局部变量(在局部范围内),它优先于成员变量。
虽然在 javascript 中,您可以通过 call
、apply
或 bind
轻松替换 this
并让您的函数成为调用 over 作者不打算使用的对象(即 this
可能是具有不同结构的对象)。我认为这就是为什么语言语法要求您始终明确指定您是指范围还是 this
的原因。
more in javascript function body 实际上可以读取全局作用域,所以定义 window.member
(如果在浏览器中)可能会改变你函数的行为,如果你不使用明确的 this
关于Javascript ES6 消除了类中各处对 'this' 关键字的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29157557/