這是我嘗試擴展本地數組對象,長度可枚舉嗎?
var extend = function(base, sub) {
sub.prototype = Object.create(base.prototype);
sub.prototype.constructor = sub;
};
MyArray = function() {
Array.call(this, arguments);
};
extend(Array, MyArray);
var arr = new MyArray();
arr.push(1);
arr.push(2);
arr.push(3);
console.log(arr);
for (var i in arr) {
if (arr.hasOwnProperty(i)) {
console.log(i + " => " + arr[i]);
}
}
而且它產生的輸出(在節點運行此)
{ '0': 1, '1': 2, '2': 3, length: 3 }
0 => 1
1 => 2
2 => 3
length => 3
我想通過調用Array.call(this, arguments)
我會被假冒的建設對象到本地構造函數,它應該處理不可枚舉的長度。
當切換到new Array()
時,它會生成以下輸出。
[ 1, 2, 3 ]
0 => 1
1 => 2
2 => 3
一般問題是爲什麼在結果對象中的差異,更具體地說,爲什麼是可以枚舉的長度屬性?
擴展本地數組非常麻煩。如果你可以在你的MyArray類中封裝一個數組,它會容易得多。 – Tibos
當然,這是一個稍微學術化的問題來定義「麻煩大家」的含義。 – jondavidjohn