راکت
حل شده

مشکل ‌‌ Arrow function ها در Object ها

11 پاسخ

سلام.
چرا از Function معمولی وقتی تو object ها استفاده میکنیم و ازش خروجی میگیریم جواب میده ولی وقتی از Arrow function ها استفاده میکنیم undefined بر میگردونه؟!
ممنون میشم جواب بدین

ثبت پرسش جدید

پاسخ‌ها

11
میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

بهترین پاسخ

در کل مسئله ی مهم دقت درباره مقدار this هستش.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this

برای تعریف توابع درون اشیا، بهتره از توابع پیکانی استفاده نشه.

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

سلام
لطفا منظورتون رو دقیق تر بفرمایید. مشخص نیست که منظورتون چیه.
یک مثال از موردی که مدنظرتون هستش رو بنویسید.

علیرضا
علیرضا
@sep28

تخصص: فرانت اند وب

@saeidalaghehband
دقیقا !! منم همچین مشکلی دارم

شاید پاسخ شما همین‌جا باشد

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

@sep28
مثال بنویسید، چه مشکلی بوده؟

علیرضا
علیرضا
@sep28

تخصص: فرانت اند وب

    let obj=()=>{

    }

درود برشما.
ابجکت ها رو نمیتونیم به شکل بالا استفاده کنیم

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

اینکه شی (object) نیست، این تابع هستش. خب مشخصه این مورد نمیشه.

mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

وقتی از arrow function استفاده میکنید کلمه کلیدی this به context کنونی اشاره میکنه یعنی به context جایی که اونجا ابجکت تعریف شده.
اما وقتی از function استفاده میکنید کلمه کلیدی this به جایی که فانکش اونجا اجرا میشه اشاره میکنه یعنی به خود ابجکت.
برای اینکه درک بهتری داشته باشید باید مفهموم context رو درک کنید.

در کل این رو بدونید که arrow functions هیچ وقت context کنونی رو تغییر نمیده اما در function با توجه به جایی که اجرا میکنیمش context متفاوت هست.

علیرضا
علیرضا
@sep28

تخصص: فرانت اند وب

@milad
خب میدونم . بعدا با استفاده از کلمه یthis ........... ک ارور میده

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

@khanzadimahdi
ممنون
برای من گویا نبودش، این context یعنی کجا؟ چجوری باید context رو تشخیص داد کجا میشه. نشونش چیه؟

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

اما وقتی از function استفاده میکنید کلمه کلیدی this به جایی که فانکش اونجا اجرا میشه اشاره میکنه یعنی به خود ابجکت.

اگر تابع (y) بعنوان ورودی تابع (x) باشه، در اینجا this ای که درون تابع y قرار میدیم به چه چیزی اشاره خواهد کرد؟

mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

به مثال زیر دقت کنید ,خروجی ها رو کامنت گذاشتم:

function testMethod() {
    console.log('test method in window');
}

let objectOne = {
    run(callback) {
        callback();
    },
    testMethod() {
        console.log('test method in objectOne');
    }
};

let objectTwo = {
    bootstrap() {
        objectOne.run(() => { // test arrow function
            this.testMethod(); //runs test method in objectTwo
        });

        objectOne.run(function() { // test normal function
            this.testMethod(); //runs test method in window
        });
    },
    testMethod() {
        console.log('test method in objectTwo');
    }
};

objectTwo.bootstrap(); // init example

// output: 
// test method in objectTwo 
// test method in window

در توابع معمولی موقع اجرا جایی که تابع اجرا بشه یه this رو از حوزه دید خودش به عنوان context میگیره و انتقال میده اما در توابع arrrow مکانی که در اونجا تعریف شدن this رو مشخص میکنه

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام