ისრის ფუნქციები უფრო მოკლეა, მაგრამ რეალური განსხვავებები დაკავშირების ქცევაში არის, არა მხოლოდ სინტაქსში.
const regular = function () {};
const arrow = () => {};
const short = x => x * 2; // implicit return for one expression
ისრის ფუნქციები უფრო მოკლეა, მაგრამ რეალური განსხვავებები დაკავშირების ქცევაში არის, არა მხოლოდ სინტაქსში.
const regular = function () {};
const arrow = () => {};
const short = x => x * 2; // implicit return for one expression
1. საკუთარი this არ აქვს — ისრები მემკვიდრეობენ this-ს შემოსაზღვრული ფარგლებიდან. ეს ყველაზე მნიშვნელოვანი განსხვავება და რატომ არის ისინი შესანიშნავი callback-ებისთვის:
const timer = {
seconds: 0,
start() {
setInterval(() => this.seconds++, 1000); // ✅ `this` is timer
// a regular function here would have its own `this` (undefined) → bug
},
};
2. arguments ობიექტი არ აქვს — გამოიყენეთ rest პარამეტრები ამის ნაცვლად:
const sum = (...args) => args.reduce((a, b) => a + b, 0);
3. არ შეიძლება გამოყენებული იყოს კონსტრუქტორებად — new arrow() გამოდის შეცდომით, და მათ prototype არ აქვთ.
const obj = {
name: "Ann",
greet: () => `Hi ${this.name}`, // ❌ `this` is NOT obj (it's outer scope)
greet2() { return `Hi ${this.name}`; }, // ✅ method needs dynamic `this`
};
ნუ გამოიყენებთ ისრებს ობიექტის მეთოდებისთვის (ისინი არ დაკავშირდებიან ობიექტთან) ან როდესაც დაგჭირდებათ დინამიური this/arguments (ივენტის დამკვრელები, რომლებიც this-ის იყო ელემენტზე დამოკიდებულნი).
გამოიყენეთ ისრები callback-ებისთვის და მოკლე ფუნქციებისთვის, სადაც this-ის მემკვიდრეობა არის რაც გსურთ; გამოიყენეთ ჩვეულებრივი ფუნქციები მეთოდებისთვის, კონსტრუქტორებისთვის და prototype მეთოდებისთვის.