Ok işlevleri, her durumda yalnızca eski moda işlevlerin daha kısa bir versiyonu olarak kullanılmak üzere tasarlanmamıştır. functionAnahtar 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 thisgenellikle 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 thissözcüksel olarak çevreleyen bağlamın üzerine yakın olduğundan, ok thisiç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 functionsö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 superiçinde kullanırsanız getOwner, kullanmıyorsanız veya getOwnerbaş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 .
thisfarklı şekilde davranmasıydı . İşlevin oluşturulduğu sözcüksel ortam tarafından tanımlanır, buthis,chopperdeğişkeni yarattığınızthisdeğerin işlevin değeri olacağı anlamına gelir . Başka bir deyişle,choppernesneye atıfta bulunmayacaktır .