Fungsi panah tidak dirancang untuk digunakan dalam setiap situasi hanya sebagai versi pendek dari fungsi kuno. Mereka tidak dimaksudkan untuk menggantikan sintaks fungsi menggunakan function
kata kunci. Kasus penggunaan paling umum untuk fungsi panah adalah "lambda" singkat yang tidak didefinisikan ulang this
, sering digunakan saat meneruskan fungsi sebagai callback ke beberapa fungsi.
Fungsi panah tidak dapat digunakan untuk menulis metode objek karena, seperti yang Anda temukan, karena fungsi panah dekat dengan this
konteks yang melingkupi secara leksikal, this
panah di dalam adalah yang ada saat ini di mana Anda mendefinisikan objek. Artinya:
var chopper = {
owner: 'Zed',
getOwner: () => {
return this.owner;
}
};
Dalam kasus Anda, ingin menulis metode pada objek, Anda cukup menggunakan function
sintaks tradisional , atau sintaks metode yang diperkenalkan di ES6:
var chopper = {
owner: 'Zed',
getOwner: function() {
return this.owner;
}
};
var chopper = {
owner: 'Zed',
getOwner() {
return this.owner;
}
};
(Ada perbedaan kecil antara mereka, tapi mereka hanya penting jika Anda menggunakan super
dalam getOwner
, yang Anda tidak, atau jika Anda menyalin getOwner
ke obyek lain.)
Ada beberapa perdebatan di milis es6 tentang twist pada fungsi panah yang memiliki sintaks yang mirip tetapi dengan fungsinya sendiri this
. Namun, proposal ini diterima dengan buruk karena itu hanyalah gula sintaks, memungkinkan orang untuk menyimpan pengetikan beberapa karakter, dan tidak menyediakan fungsionalitas baru atas sintaks fungsi yang ada. Lihat topik fungsi panah tak terikat .
this
berbeda. Ini ditentukan oleh lingkungan leksikal tempat fungsi itu dibuat, yang berartithis
nilai tempat Anda membuatchopper
variabel akan menjadithis
nilai fungsi. Dengan kata lain, itu tidak akan mereferensikanchopper
objek.