متد bind برای ساختن تابعی استفاده میشه که مقدار this معین و مشخصی داره. همونطور که میدونیم در حالت عادی توابع ما تا زمانی که اجرا نشن نمیتونیم مقدار this اونها رو تشخیص بدیم. اما شرایطی هست که ما میخوایم صراحتاً مشخص کنیم که this چه مقداری داشته باشه. اینجا چنین متدی به کار ما میاد.
متد bind به ما یک تابع رو برمیگردونه که وقتی اون رو صدا میزنیم، مقدار this توی اون تابع به آبجکت دلخواه ما اشاره میکنه. پس به این بستگی نداره که این تابع چطوری و کجا داره صدا زده میشه.
مثال زیر رو درنظر بگیرید:
const counter = { hit() { this.count++; } }
اینجا تا زمانی که متد hit اجرا نشه، مقدار this توی خط ۳ رو نمیتونیم تشخیص بدیم. اما از متد bind به شکل زیر استفاده میکنیم تا this دلخواه خودمون رو مشخص کنیم:
const jumps = { count: 0 } const hitJumps = counter.hit.bind(jumps);
ما اینجا گفتیم که آبجکت jumps رو در نظر بگیر برای this که توی hit داره استفاده میشه. خروجی bind که الان یک تابع هست، ریخته میشه توی متغیر hitJumps و با هر بار فراخونی اون، متد hit یک واحد به count توی آبجکت jumps اضافه میکنه:
hitJumps(); hitJumps(); hitJumps(); console.log(jumps.count); // 3
کد کامل این قسمت:
const counter = { hit() { this.count++; } } const jumps = { count: 0 } const hitJumps = counter.hit.bind(jumps); hitJumps(); hitJumps(); hitJumps(); alert(jumps.count); // 3
برای آشنایی کامل با این متد میتونین پست زیر رو ببینین:
منبع:
