在javascript中重新定义数组推送方法?

时间:2011-03-25 02:39:20

标签: javascript arrays

我是js的新手。 我在Array Object中重新定义了push()方法,如下所示..

Array.prototype.push = function(item) {
    this[this.length] = '[' + item + ']';
    return this;
};

var arr = new Array();
arr.push('my');
console.debug(arr);
console.debug(arr[0]);

arr.push('name');
console.debug(arr);
console.debug(arr[1]);

arr.push('is');
console.debug(arr);
console.debug(arr[2]);


// output

[] --> <1>
[my]
[] --> <2>
[name]
[] --> <3>
[is]

但我无法理解为什么&lt; 1&gt;,&lt; 2&gt;,&lt; 3&gt;是空的。

2 个答案:

答案 0 :(得分:1)

如果删除连接的括号,则可以正常工作。

jsFiddle

内部调用了{p> It looks like push,这可能就是它无法正常工作的原因。

此外,我们不应该有任何理由自己重新实施push

答案 1 :(得分:1)

尝试使用console.debug(arr.join(','));代替console.debug(arr);

this jsfiddle一样。

现在输出

[my]
[my]
[my],[name]
[name]
[my],[name],[is]
[is]

在Chrome上测试。

至于debug.console()打印数组时的奇怪行为,我怀疑它在构建输出字符串时也在数组上使用了push()。例如,如果您将'['+item+']'替换为'<<'+item+'>>',则会在Firebug控制台中遇到一些问题,例如this jsfiddle