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

时间:2016-10-02 19:44:50

标签: javascript arrays tostring

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

这有效:

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

但“这个”不起作用:

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

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

旁注 - 我知道覆盖这样的内置方法是多么糟糕。我正在为复杂(对于我的级别)递归函数进行调试 - 代码本身并不依赖于任何逻辑的此功能。

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

3 个答案:

答案 0 :(得分:5)

您可以使用this来访问实际的数组。但它不适用于thisarrow function。在这种情况下,您需要经典的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());




答案 1 :(得分:1)

箭头函数中未定义

this

如上所述here

  

箭头函数不会创建自己的this上下文,因此this具有封闭上下文的原始含义。

答案 2 :(得分:1)

es2015中的短数组函数没有文字Array.prototype.toString = function() { return "0: " + this[0]; } 。所以使用

BinaryFormatter