【发布时间】:2017-11-16 15:48:50
【问题描述】:
免责声明: 这是为了学习目的,我已经知道给js内置对象添加方法不是一个好习惯。
我正在尝试为一个小型爱好项目的数组原型添加一个新方法:
Array.prototype.add = function (element) {
console.log('array before: ' + JSON.stringify(this));
let arr = this;
if (arr.length) {
let set = new Set(arr);
console.log('set before: ' + JSON.stringify(set));
console.log('adding element: ' + JSON.stringify(element));
set = set.add(element);
console.log('set after: ' + JSON.stringify(set));
} else {
arr.push(element);
}
console.log('array after: ' + JSON.stringify(arr));
};
在按预期推送后尝试调用新方法。在连续调用中,“array before:”日志按预期打印,第一次推送构成了数组的内容,但是将数组提供给我的 Set 构造函数会导致一个空集,正如我的“set before:”和“设置后:”记录都打印一个空的{}。我不确定为什么 Set 不会从数组中实例化,任何帮助将不胜感激。
【问题讨论】:
-
附加:这似乎是我的 Set 声明的问题。我可以用
let set = new Set(arr);代替var set = new Set([0, 1, 2, 3]);,得到相同的结果。 -
如果你只是
console.log(set),你应该可以看到里面有什么。 -
console.log()可以接受多个参数。 使用它并且不要进行字符串连接。检查一下:console.log('set before:', set)或console.log('set before:', [...set]) -
感谢大家的指正,我都投了赞成票。
标签: javascript arrays set prototype