Happy Learn
Happy Learn
خواندن ۲ دقیقه·۳ سال پیش

call , bind , apply در جاوا اسکریپت

call , bind , apply
call , bind , apply

سلام سلام ما هپی لرن هستیم و شما دارید ششمین پست اموزشیمون رو از سایت ویرگول می‌خونید. در هپی لرن درباره‌ی موضوعات و مهارت هایی صحبت می‌کنیم که فارغ از این که شما با چه زبان برنامه نویسی دارید کد می‌زنید و یا چند ساله که دارید در حوزه برنامه نویسی فعالیت می‌کنید، میتونه بهتون کمک کنه تا در مسیر درست قرار بگیرید و سطح رضایتتون از کد زنی بالا ببرید. شما میتونید مقالات ما رو شنبه‌ها و جمعه ها از همین صفحه دنبال کنید.

در مدل برنامه نویسی به زبان های مختلف object oriented وقتی که از کلمه کلیدی this استفاده می‌کنیم ،این this به نمومه جاری در کلاس برمیگرده.اما الان میخوایم بدونیم وضعیت this تو جاوا اسکریپت چطوره!!
اینکه توی جاوا اسکریپت this دقیقا به چی اشاره می‌کنه و به ما چی برمی‌گردونه بستگی به این داره که function ها چطوری فراخوانی میشن.

example
example

اینجا ما person رو با استفاده از object خودش فراخوانی کردیم.

example
example

می‌بینیم که خروجی این کد undefined است!

اما حالا چرا اینطوری شد؟ما اینجاPerson.printname رو توی یه متغیر به اسم printfullname نوشتیم اما بعدش میایم و object اون رو بدون هیچ رفرنسی صدا می‌زنیم.بنابراین الان this به window (فضای کلی) اشاره می‌کند.وبرای همین undefined رو خروجی میده.

example
example

اینجا داریم counter.incremental رو فراخوانی میکنیم.به نظرتون خروجی اینجا چی میشه؟!اینجا this به DOM برمی‌گرده و به counter برنمی‌گرده.

خب بیاید حالا یه مرور کنیم تا اینجا چی یاد گرفتیم؟!تا اینجا دیدیم که this داخل function ها به object های متفاوتی برمی‌گرده و هم‌چنین بستگی داره که توابع چطوری فراخوانی میشن!

حالا چطوری این مسئله رو هندل کنیم؟خب ما تو جاوا اسکریپت ۳ تا method داریم برا فراخوانی،به اسم های call,bind ,apply که خیلی هم مفید و کاربردی هستن.

حالا بیاید بریم ببینیم اینا چیکار میکنن!با هرکدوم از این میشه به method ها و attribute های متفاوتی دسترسی داشته باشیم.

bind

این method یک function جدید می‌سازد و this رو روی object خاصی set می‌کنه.

bind
bind

در این‌جا bind یک function جدید با پارامتری که قبلا تعریف شده(lang) می‌سازد و this هم به set، name خواهدشد.

call

این متد this را داخلset , function می‌کند و مستقیما function را اجرا می‌کند،اینم بگم که argument ، call هارو هم قبول می‌کنه.

حالا پس بیا ببینیم call و bind چه فرقی باهم دارند؟ در call مستقیما ،function رو اجرا می‌کنه و this رو set میکنه اما کپی از function ایجاد نمی‌کنه.در حالی که bind یه کپی از function درست می‌کنه.

apply

کار این method هم مثل call هست با این تفاوت که در apply میشه مجموعه ایی از آرایه ها رو هم به عنوان ورودی دریافت کرد.

apply
apply

و تمام ؛)
پس تو این پست یاد گرفتیم که چطوری در object programming در js با استفاده از call,bind,apply ، توابع رو فراخوانی کنیم.
و دراخر اگه دوست دارید راجب موضوع خاصی بنویسیم لطفا تو کامنت ها برامون بگید، و همچنین معرفی ما به دوستاتون میتونه بهمون خیلی کمک کنه تا تیم هپی لرن رو بزرگتر کنیم.

جاوا اسکریپتjsjavascript
اینجا قراره کلی اطلاعات مفید و باحال یاد بگیریم:)
شاید از این پست‌ها خوشتان بیاید