سلام سلام ما هپی لرن هستیم و شما دارید ششمین پست اموزشیمون رو از سایت ویرگول میخونید. در هپی لرن دربارهی موضوعات و مهارت هایی صحبت میکنیم که فارغ از این که شما با چه زبان برنامه نویسی دارید کد میزنید و یا چند ساله که دارید در حوزه برنامه نویسی فعالیت میکنید، میتونه بهتون کمک کنه تا در مسیر درست قرار بگیرید و سطح رضایتتون از کد زنی بالا ببرید. شما میتونید مقالات ما رو شنبهها و جمعه ها از همین صفحه دنبال کنید.
در مدل برنامه نویسی به زبان های مختلف object oriented وقتی که از کلمه کلیدی this استفاده میکنیم ،این this به نمومه جاری در کلاس برمیگرده.اما الان میخوایم بدونیم وضعیت this تو جاوا اسکریپت چطوره!!
اینکه توی جاوا اسکریپت this دقیقا به چی اشاره میکنه و به ما چی برمیگردونه بستگی به این داره که function ها چطوری فراخوانی میشن.
اینجا ما person رو با استفاده از object خودش فراخوانی کردیم.
میبینیم که خروجی این کد undefined است!
اما حالا چرا اینطوری شد؟ما اینجاPerson.printname رو توی یه متغیر به اسم printfullname نوشتیم اما بعدش میایم و object اون رو بدون هیچ رفرنسی صدا میزنیم.بنابراین الان this به window (فضای کلی) اشاره میکند.وبرای همین undefined رو خروجی میده.
اینجا داریم counter.incremental رو فراخوانی میکنیم.به نظرتون خروجی اینجا چی میشه؟!اینجا this به DOM برمیگرده و به counter برنمیگرده.
خب بیاید حالا یه مرور کنیم تا اینجا چی یاد گرفتیم؟!تا اینجا دیدیم که this داخل function ها به object های متفاوتی برمیگرده و همچنین بستگی داره که توابع چطوری فراخوانی میشن!
حالا چطوری این مسئله رو هندل کنیم؟خب ما تو جاوا اسکریپت ۳ تا method داریم برا فراخوانی،به اسم های call,bind ,apply که خیلی هم مفید و کاربردی هستن.
حالا بیاید بریم ببینیم اینا چیکار میکنن!با هرکدوم از این میشه به method ها و attribute های متفاوتی دسترسی داشته باشیم.
این method یک function جدید میسازد و this رو روی object خاصی set میکنه.
در اینجا bind یک function جدید با پارامتری که قبلا تعریف شده(lang) میسازد و this هم به set، name خواهدشد.
این متد this را داخلset , function میکند و مستقیما function را اجرا میکند،اینم بگم که argument ، call هارو هم قبول میکنه.
حالا پس بیا ببینیم call و bind چه فرقی باهم دارند؟ در call مستقیما ،function رو اجرا میکنه و this رو set میکنه اما کپی از function ایجاد نمیکنه.در حالی که bind یه کپی از function درست میکنه.
کار این method هم مثل call هست با این تفاوت که در apply میشه مجموعه ایی از آرایه ها رو هم به عنوان ورودی دریافت کرد.
و تمام ؛)
پس تو این پست یاد گرفتیم که چطوری در object programming در js با استفاده از call,bind,apply ، توابع رو فراخوانی کنیم.
و دراخر اگه دوست دارید راجب موضوع خاصی بنویسیم لطفا تو کامنت ها برامون بگید، و همچنین معرفی ما به دوستاتون میتونه بهمون خیلی کمک کنه تا تیم هپی لرن رو بزرگتر کنیم.