Nic*_*tel 5 javascript ecmascript-6 traceur
我现在正在使用 Traceur 来编写一些未来的 javascript,这是我在某个课程中拥有的函数
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;
}
Run Code Online (Sandbox Code Playgroud)
当然,与任何传统的 JavaScript 代码一样,它到处都被 this 关键字覆盖。来自 Java 等,当我引用类内部的字段时,当我不需要指定这个字段时,对我来说这是非常不自然的。
有什么方法可以让 Traceur 像 Java 一样解释类吗?(即在未指定时自动插入此内容等)
据我所知,不。
在 Java、C#、C++ 等中,这是编译器的功能,而不是执行的功能。这意味着它是隐式完成的,编译器所做的是将正确的地址放入this并以正确的方式引用变量。大多数编译器都有一条规则,如果您有一个同名的局部变量(在局部范围内),则它具有成员变量的优先级。
而在 javascript 中,您可以轻松地替换thisvia call, applyor ,并通过作者不打算使用的对象(即可能是具有不同结构的对象)bind调用您的函数。我认为这就是为什么语言语法要求您始终明确指定您是否引用范围或.thisthis
javascript函数体中的更多内容实际上可以读取全局范围,因此window.member如果您不使用显式定义(如果在浏览器中),则可能会改变函数的行为this