在Array原型上定义自定义.toString()方法时,如何访问调用该方法的实际数组?
这有效:
Array.prototype.toString = () => 'custom';
"" + [1,2,3]; // 'custom'
但“这个”不起作用:
Array.prototype.toString = () => "0: " + this[0];
"" + [1,2,3]; // 0: undefined
显然this
没有引用调用.toString()的数组,但我不确定为什么也不确定如何获取数组。
旁注 - 我知道覆盖这样的内置方法是多么糟糕。我正在为复杂(对于我的级别)递归函数进行调试 - 代码本身并不依赖于任何逻辑的此功能。
更详细的背景信息是我在许多不同的地方注销了一个数组,并且每次更改默认格式似乎比编写更长的日志语句更容易。事实证明我错了,但现在只是想弄清楚这个问题,因为它似乎是我应该知道的基本内容。
答案 0 :(得分:5)
您可以使用this
来访问实际的数组。但它不适用于this
和arrow 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)
答案 2 :(得分:1)
es2015中的短数组函数没有文字Array.prototype.toString = function() {
return "0: " + this[0];
}
。所以使用
BinaryFormatter