javascript数组原型 - 添加了新方法 - 奇怪的console.log

时间:2013-06-21 09:50:25

标签: javascript prototype console.log

我正在开发一个项目,其中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]

我认为在这样的控制台日志中只应存在值。我做错了什么或者这是一种正常的行为(反正看起来很奇怪)?我很感激一些解释。

1 个答案:

答案 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([]);

http://jsfiddle.net/qHFhw/1/