Пользовательский метод .toString() для массива

При определении пользовательского метода .toString() в прототипе Array, как вы получаете доступ к фактическому массиву, для которого вызывается метод?

Это работает:

Array.prototype.toString = () => 'custom';
"" + [1,2,3]; // 'custom'

Но "это" не работает:

Array.prototype.toString = () => "0: " + this[0];
"" + [1,2,3]; // 0: undefined

Ясно, что this не ссылается на массив, к которому вызывается .toString(), но я не уверен, почему и как получить доступ к массиву.

Примечание: я знаю, как ужасно переопределять встроенные методы, подобные этому. Я делаю это для отладки сложной (для моего уровня) рекурсивной функции — сам код не использует эту функциональность для какой-либо логики.

Более подробная справочная информация заключается в том, что я вывожу массив из множества разных мест, и изменение форматирования по умолчанию казалось проще, чем каждый раз писать гораздо более длинный оператор журнала. Оказывается, я ошибался, но теперь просто хочу разобраться в этом вопросе, потому что это похоже на что-то основное, что я должен знать.


person ballenf    schedule 02.10.2016    source источник
comment
Выглядит как дубликат Что означает "это ” относятся к стрелочным функциям в ES6?   -  person adeneo    schedule 02.10.2016
comment
Да, это так, как только вы знаете, что это нахождение в стрелочной функции имеет отношение к ответу. Мое прежнее «я» даже не знало, что использование функции стрелки имеет какое-либо отношение к проблеме, поэтому я бы не искал эту фразу или не смотрел на эти вопросы. Вероятно, также, почему, когда я искал по теме более 30 минут и читал все предложенные ссылки, ничего полезного не обнаружилось.   -  person ballenf    schedule 03.10.2016


Ответы (3)



this не определяется в стрелочных функциях.

Как указано здесь:

Стрелочная функция не создает свой собственный контекст this, поэтому this имеет исходное значение из окружающего контекста.

person Ouroborus    schedule 02.10.2016
comment
Спасибо. Теперь это звонит в колокольчик, но я обычно не использую this, так что раньше это никогда не было проблемой. - person ballenf; 02.10.2016

Функции коротких массивов в es2015 не имеют литерала this. так что используйте

Array.prototype.toString = function() {
 return  "0: " + this[0];
}
person Emre Sakarya    schedule 02.10.2016