در این بخش از سری آموزش جاوا اسکریپت قصد داریم در مورد متدهای Borrowing یا همان قرض گرفتن در جاوا اسکریپت صحبت کنیم.
متدهای قرض گرفتن از شی (Object)
در جاوا اسکریپت, می توانید متدها را از آبجکت های دیگر برای ایجاد بعضی از عملکردها بدون ارث بری دیگر خصوصیات و متدها استفاده کنید.
جاوا اسکریپت دو متد را برای تابع آبجکت ها, call()
و apply()
که به ما اجازه می دهد یک تابع را همانند یک متد از آبجکت دیگر, فراخوانی کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
var objA = { name: "object A", say: function(greet) { alert(greet + ", " + this.name); } } objA.say("Hi"); // Displays: Hi, object A var objB = { name: "object B" } /* The objA doesn't have say() method, but it can borrow it from objA */ objA.say.call(objB, "Hello"); // Displays: Hello, object B |
تفاوت بین متدهای call() و apply()
سینتکس متد apply(
) تقریبا با call()
یکسان است با این تفاوت که call()
یک لیست از آرگومان ها را بصورت call(thisObj, arg1, arg2, ...)
دریافت می کند در حالی که متد apply()
همه را در یک آرایه تنها بصورت apply(thisObj, [argsArray])
دریافت می کند.
به براکت های مربعی []
که نشان دهنده آرایه هستد در آخر این مثال توجه کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
var objA = { name: "object A", say: function(greet) { alert(greet + ", " + this.name); } } objA.say("Hi"); // Displays: Hi, object A var objB = { name: "object B" } /* The objA doesn't have say() method, but it can borrow it from objA */ objA.say.apply(objB, ["Hello"]); // Displays: Hello, object B |
استفاده از متدهای از قبل-ساخته-شده (built-in)
همچنین متد apply()
به ما اجازه می دهد از متد های built-in برای انجام بعضی عملیات به سادگی و آسانی استفاده کنیم.
مثالی از آن استفاده از Math.max()
/Math.min()
برای پیداکردن حداکثر یا حداقل مقدار در یک آرایه است که در حالت عادی باید یک حلقه را روی مقادیر آرایه اجرا می کردیم.
همانطور که از بخش های قبلی آموزش جاوا اسکریپت می دانید, آرایه های جاوا اسکریپت متد max()
ندارد ولی Math
را بله, پس می توانید متد Math.max()
را همانند مثال زیر apply کنید:
1 2 3 4 5 |
var numbers = [2, 5, 6, 4, 3, 7]; // Using Math.max apply var max = Math.max.apply(null, numbers); alert(max); // Outputs: 7 |
نکته: اولین آرگومان برای دو متد call()
و apply()
یک آبجکت است که تابعی را فراخوانی کرده است. استفاده از null
برای آرگومان اول مثل صدا زدن تابع بدون دادن هیچ آبجکتی برای اشاره گر this
داخل تابع است.
اپراتور جدید …
در ES6 یک راه کوتاه تر برای دریافت مقدار حداکثر یا حداقل از یک آرایه بدون استفاده از متد apply()
است.
1 2 3 4 5 |
var numbers = [2, 5, 6, 4, 3, 7]; // Using spread operator var max = Math.max(...numbers); alert(max); // Outputs: 7 |
به هر حال هر دو …
و apply()
در صورتی که آرایه تعداد زیادی المان (ده ها هزار) داشته باشد, نتیجه نادرستی را برگشت می دهند.
در این صورت می توانیم از Array.reduce()
برای پیدا کردن مقدار حداکثر یا حداقل در یک آرایه عددی با مقایسه هر کدام از مقدارها, استفاده کنیم.
1 2 3 4 5 6 7 |
var numbers = [2, 5, 6, 4, 3, 7]; // Using reduce method var max = numbers.reduce(function(a, b) { return Math.max(a, b); }); alert(max); // Outputs: 7 |
امیدواریم در این بخش آموزش جاوا اسکریپت, از آموزش متدهای قرض گرفتن در جاوا اسکریپت نهایت استفاده را برده باشد.
هر سوالی داشتید ، از قسمت نظرات ارسال کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق باشید.