在数组上自定义.toString()方法

Ben*_*her 1 javascript arrays tostring

在Array原型上定义自定义.toString()方法时,如何访问调用该方法的实际数组?

这有效:

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

但"这个"不起作用:

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

显然this没有引用调用.toString()的数组,但我不确定为什么并且不确定如何获取数组.

旁注 - 我知道覆盖这样的内置方法是多么糟糕.我做了很复杂(我的级别)递归函数的调试 - 代码本身并不是依靠这个功能对于任何逻辑.

更详细的背景信息是我在许多不同的地方注销一个数组,并且更改默认格式似乎比每次写一个更长的日志语句更容易.事实证明我错了,但现在只想弄清楚这个问题,因为它似乎是我应该知道的基本内容.

Nin*_*olz 5

您可以this用来访问实际的数组.但它不适this用于箭头功能.在这种情况下,您需要经典function关键字.

var array = ['first', 'second', 'third'];

Array.prototype.toString = () => "0: " + this[0];
console.log(array.toString());
Array.prototype.toString = function () { return "0: " + this[0] };
console.log(array.toString());
Run Code Online (Sandbox Code Playgroud)