如何使用“;这个“;在“;回调”;在ES6
How to use "this" of class in "callbacks" in ES6?
我正在使用带有ES2015的Babel。并且要在callback
内部方法中使用this
。
class baz {
bar = "xxx";
foo() {
x(function() {
console.log(this.bar);
});
}
}
function x(callback) {
return callback();
}
var y = new baz();
y.foo();
https://jsfiddle.net/dnthehnt/7/我得到
TypeError:这是未定义的
因为据我所知,这指的是CCD_ 3中的回调函数。作为一种解决方案,我使用
class baz {
bar = "xxx";
foo() {
var bar = this.bar;//<=====
x(function() {
console.log(bar);//<=====
});
}
}
function x(callback) {
return callback();
}
var y = new baz();
y.foo();
https://jsfiddle.net/dnthehnt/6/并获得
xxx
这是一个解决方案,但如果您有大量的代码,就会变得非常混乱和难以编写。有没有更好的解决方案来使用this
?或者ES6的任何其他使用回调和此的规程。
研究箭头函数,特别是与经典函数相比,箭头函数处理this
的方式。
class baz {
constructor() { this.bar = "xxx"; }
foo() {
x(() => {
console.log(this.bar);
});
}
}
若在对x
的调用和对回调的调用之间更改bar,那个么使用经典函数的解决方案将不起作用。
这就是你应该如何使用经典功能
class baz {
constructor() { this.bar = "xxx"; }
foo() {
const self = this;
x(function () {
console.log(self.bar);
});
}
}
或者你可以用bind
。
class baz {
constructor() { this.bar = "xxx"; }
foo() {
x((function () {
console.log(this.bar);
}).bind(this));
}
}
相关文章:
- AngularJS:我可以跳过函数参数回调吗
- 要求未定义JS回调参数
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- 自引用回调
- 在es6中,将带有回调的事件侦听器设置为可迭代的
- 如何使用“;这个“;在“;回调”;在ES6
- es6 Javascript 类在回调中使用它
- 调用 ES6 方法时的绑定上下文.如何从称为回调的方法中访问对象
- 在 $resource.query 回调函数中访问类变量时出现 es6 问题
- 在ES6中扩展类时是否可以定义回调?
- ES6将参数传递给从回调函数调用的函数
- 调用另一个模块函数作为回调[ES6]
- 扩展ES6承诺,将回调转换为Deferred模式
- ES6承诺已解决回调
- 在ES6类语句中访问回调中的类成员
- ES6 + Angular控制器类,在回调中没有定义
- 如何在ES6中将回调代码转换为promise
- 如何从Ecmascript 6(ES6)上类对象中的事件回调函数访问对象成员
- ES6:对象之间的回调函数
- 找出回调函数的对象是否是ES6箭头