原型功能污染JavaScript数组

时间:2013-05-07 16:16:47

标签: javascript arrays prototype apply

我正在使用一个可以接受多个数组的API,我使用apply()来传递数组,但数组包含一个我似乎无法从中移除的原型函数个别阵列。最终发生的是原型功能正在执行。

这是原型功能:     if ( !Array.prototype.last ) { Array.prototype.last = function(){ return this[this.length - 1]; }}

例如,当我记录每个数组时,我在eventList数组中看到以下内容:

["name1", "index1", "value1", last: function]
["name2", "index2", "value2", last: function]
["name3", "index3", "value3", last: function]

然后推送数组:

apiName.push.apply( apiName, eventList );

我已尝试array.pop()删除最后一个'每个阵列都有功能,但无济于事。

原型函数如何首先在数组中结束,如何防止在apply()中调用它?

感谢您的任何见解!

1 个答案:

答案 0 :(得分:1)

数组是JavaScript中的对象。它们可以像Object一样拥有属性和原型。

例如:

var a = [];
a.foo = "bar";

这完全有效。但是数组中的"bar" 吗?

我们问:

console.log(a.length); // 0
console.log(a.foo); // "bar"

所以:没有,它不是中的,但它确实作为Object的属性存在。

就像使用属性向原型中添加内容不会影响.length的值。

在登录时看到自定义原型有点不幸(令人困惑),但我会将其归因于调试器中的自定义。