比方說陣列樣機已經增加了一些輔助函數後數組的鍵:方法顯示爲深克隆與jQuery.extend
Array.prototype.doSomething = function() { ... }
當我註銷一個簡單的數組到控制檯...
console.dir([1,2,3]);
...我得到:
Array [3]
0: 1
1: 2
2: 3
length: 3
__proto__: Array[0]
doSomething: function()
一切正常爲止。
但只要我深克隆使用$ .extend陣列(深克隆,因爲我的實際數據是比較複雜的 - 用數組作爲屬性的對象,但在任何情況下發生的)...
$.extend(true, [], [1,2,3]);
我突然得到:
Array [3]
0: 1
1: 2
2: 3
doSomething: function() // ???
length: 3
__proto__: Array[0]
doSomething: function()
它看起來像原型方法已被添加爲數組實例的實際項目。
在複製之前,JQuery.extend沒有測試hasOwnProperty()嗎?或者我在這裏做錯了什麼?
是的,但是你也做錯了,請參閱[如何在Array.prototype和Object.prototype上定義javascript方法,以便它不出現在循環中](http:// stackoverflow .com/q/13296340/1048572) – Bergi