我正在开发一个项目,其中Array原型添加了新方法:
Array.prototype.addOrRemove = function(value) {
var index = _.indexOf(this, value);
if (index === -1) {
this.push(value);
} else {
this.splice(index, 1);
}
return this;
};
它要么添加新值(如果它不存在于数组中),要么删除它(否则)。奇怪的是,当我输入:
console.log([]);
我得到以下输出(在chrome JS控制台中):
[addOrRemove: function]
我认为在这样的控制台日志中只应存在值。我做错了什么或者这是一种正常的行为(反正看起来很奇怪)?我很感激一些解释。
答案 0 :(得分:5)
您可以使用defineProperty
,默认情况下会使属性不可枚举。
Object.defineProperty(
Array.prototype,
'addOrRemove',
{
get: function() {
return function(value) {
var index = _.indexOf(this, value);
if (index === -1) {
this.push(value);
} else {
this.splice(index, 1);
}
return this;
};
}
}
);
console.log([]);