Ok işlevleri, her durumda yalnızca eski moda işlevlerin daha kısa bir versiyonu olarak kullanılmak üzere tasarlanmamıştır. function
Anahtar kelimeyi kullanarak işlev sözdizimini değiştirmeleri amaçlanmamıştır . Ok işlevlerinin en yaygın kullanım durumu, yeniden tanımlamayan kısa "lambdalar" dır ve this
genellikle bir işlevi bazı işleve geri çağrı olarak iletirken kullanılır.
Ok fonksiyonları nesne yöntemlerini yazmak için kullanılamaz, çünkü bulduğunuz gibi, ok işlevleri this
sözcüksel olarak çevreleyen bağlamın üzerine yakın olduğundan, ok this
içindeki, nesneyi tanımladığınız yerde geçerli olandır. Söylenmek istenen:
var chopper = {
owner: 'Zed',
getOwner: () => {
return this.owner;
}
};
Sizin durumunuzda, bir nesneye bir yöntem yazmak istiyorsanız, yalnızca geleneksel function
sözdizimini veya ES6'da tanıtılan yöntem sözdizimini kullanmalısınız:
var chopper = {
owner: 'Zed',
getOwner: function() {
return this.owner;
}
};
var chopper = {
owner: 'Zed',
getOwner() {
return this.owner;
}
};
(Aralarında küçük farklar vardır, ancak bunlar yalnızca super
içinde kullanırsanız getOwner
, kullanmıyorsanız veya getOwner
başka bir nesneye kopyalarsanız önemlidir .)
Es6 posta listesinde, benzer sözdizimine sahip ancak kendilerine ait olan ok işlevlerinde bir bükülme hakkında bazı tartışmalar vardı this
. Bununla birlikte, bu öneri zayıf bir şekilde alındı çünkü bu sadece sözdizimi şekeri, insanların birkaç karakter yazarak kaydetmelerine izin veriyor ve mevcut işlev sözdizimi üzerinde yeni işlevler sağlamıyor. Sınırsız ok işlevleri konusuna bakın .
this
farklı şekilde davranmasıydı . İşlevin oluşturulduğu sözcüksel ortam tarafından tanımlanır, buthis
,chopper
değişkeni yarattığınızthis
değerin işlevin değeri olacağı anlamına gelir . Başka bir deyişle,chopper
nesneye atıfta bulunmayacaktır .