BAE*_*BAE 5 javascript ecmascript-6
我读了一些代码:
class XXXX {
init() {
MyOBJ.on('EVENTNAME', this.myfunction.bind(this)); // Line3, MyOBJ extends EventEmitter
}
}
Run Code Online (Sandbox Code Playgroud)
只是好奇如何使用箭头函数替换 Line3?谢谢
Function.prototype.bind创建一个新函数,该函数在调用时将其 this 关键字设置为提供的值,并在调用新函数时在任何提供的参数之前提供给定的参数序列。
这个特定的例子 - this.myFunction.bind(this)- 实现的是能够传递对函数的引用(恰好也被 this.myFunction 引用),同时确保对该函数的任何调用都在this.
在 ES2015+ 中,我们可以这样做:
class XXXX {
init() {
MyOBJ.on('EVENTNAME', (event) => this.myfunction(event));
}
}
Run Code Online (Sandbox Code Playgroud)
使用 ES2015 箭头函数this将在主体内部成为箭头函数的声明上下文。所以在我们的例子中this.myFunction,在一个箭头函数中被调用,它的上下文是调用的上下文init(),也就是this在init.
关键的区别在于,现在您实际上创建了一个调用表达式,而不是仅仅传递对函数的引用。这次给出的参考MyOBJ.on是箭头函数。
与上面的代码片段等效的严格 ES5 也将使用函数文字作为给定的回调MyOBJ.on:
class XXXX {
init() {
MyOBJ.on('EVENTNAME', function(event) {
this.myfunction(event));
}.bind(this));
}
}
Run Code Online (Sandbox Code Playgroud)
替换这个
\n\nthis.myfunction.bind(this)\nRun Code Online (Sandbox Code Playgroud)\n\n对此
\n\n\n() => {}\n\n\n您的事件绑定如下所示:
\n\nclass XXXX {\n someMethod() {}\n init() {\n MyOBJ.on(\'EVENTNAME\', () => {\n this.someMethod(); // The originating context it\'s actually your class XXXX\n });\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\nthis\n\n\nES6 Javascript 标准中最受期待的新功能之一是箭头函数表达式。它承诺比它的前身函数表达式更短的语法。此外,新的箭头函数如何绑定,或者实际上不绑定它\xe2\x80\x99s 拥有这个。箭头函数按词法绑定其上下文,因此 this 实际上指的是原始上下文。
\n
| 归档时间: |
|
| 查看次数: |
9903 次 |
| 最近记录: |