برخی از اشیاء در جاوااسکریپت وجود دارند که در ظاهر شبیه به آرایه هستند و رفتار مشابهی دارند، اما تمام متدهای یک Array واقعی را به ارث نمیبرند. از جملهی اینها میتوان به NodeList (که توسط دستور document.getElementsByTagName برگردانده میشود) یا شیء arguments (که در بدنه توابع در دسترس است) اشاره کرد.
شیء arguments ویژگی length را به شما میدهد، اما متدهای بومی آرایه مثل forEach() روی آن پیادهسازی نشده است. به همین دلیل، شما نمیتوانید Array methodها را به صورت مستقیم روی یک شیء Array-like صدا بزنید:
function printArguments() {
arguments.forEach((item) => {
console.log(item);
});
// خطای تایپی رخ میدهد:
// TypeError: arguments.forEach is not a function
}
اما شما میتوانید این متدها را به صورت غیرمستقیم و با استفاده از Function.prototype.call() روی آنها اجرا کنید:
function printArguments() {
Array.prototype.forEach.call(arguments, (item) => {
console.log(item);
});
}
از آنجا که رشتهها (Strings) نیز امکان دسترسی توالیگونه (Sequential access) به کاراکترهایشان را دقیقاً مشابه آرایهها فراهم میکنند، متدهای موجود در Array prototype روی Stringها نیز قابل استفاده هستند:
Array.prototype.forEach.call("a string", (chr) => {
console.log(chr);
});
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://developer.mozilla.org/en-US/docs/Web/JavaScript