ES2015 ile Babel kullanıyorum. Ve iç yöntemde callback
içinde this
kullanmak istiyorum. bildiğim kadarıyla anladığım kadarıyla bu x()
yılında geri arama işlevi ifade eder çünküES6'daki "geri aramalar" içindeki "bu" sınıfı nasıl kullanılır?
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/ Ben
TypeError: this is undefined
alıyorum. Bir çözüm olarak ben
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/ kullanmak Ve bu çözüm
xxx
olsun, ama bunu çok kafa karıştırıcı ve yazmak zor olmaya başladı kod kütlesini varsa. this
'u kullanmanın daha iyi bir çözümü var mı? Ya da geri aramaları kullanmak için ES6'ya ait başka bir disiplin ve bu.
Bu geçerli değil ES2015. İkinci satırdaki gibi geçersiz ('bar =" xxx ";'). A) Bu kodu 'constructor() {/*...*/}' ve B) 'ye koymak için 'this' kelimesini' bar'ın önünde kullanmak. –
Sanırım '' '' yapıcı'' yerine koymak gerekli değildir. Başlatmada eklenecek kurucu değişkenleri koymak daha iyi olacağını düşünüyorum. – Shekspir
Bu, "düşünme" nin bir yolu değil. Bu kod geçerli ES2015 kodu değil. Örnek alanların bu şekilde tanımlanmasına izin vermek için [Aşama 1 teklifi] (https://github.com/jeffmo/es-class-fields-and-static-properties) vardır, ancak bu sadece 1. Aşamadır (aşamalar vardır 0 ila 4, burada 4 "sonraki spesifikasyona dahil olmaya hazır"). ES2016 spesifikasyonunu engellemedi ve daha hızlı ilerlemediği sürece ES2017 için iffy görünmüyordu. Babil onu iletebilirken (Babel standart dışı birçok özelliğe sahiptir), sözdizimi, standart dışı bir kodla sizi bırakmadan önce belirtime göre değişebilir. –