为什么子类数组的 JSON 字符串化是一个对象?
Why is the JSON stringification of a subclassed array an object?
/* Whosebug needs a console API */ console.log = function(x) { document.write(x + "<br />"); };
B = function() {}
B.prototype = Array.prototype;
var a = new Array();
var b = new B();
a[0] = 1;
b[0] = 1;
console.log(JSON.stringify(a));
console.log(JSON.stringify(b));
JSON 将子类字符串化为对象 ( { "0": 1 }
) 而不是数组 ( [1]
)`
有什么方法可以修改这种行为吗?
编辑
我正在使用(不可协商)ES5。我稍微简化了示例。实际上,子类化是通过函数 inherit()
设置的,它执行以下操作:
var inherit = function(base, derived) {
function F() {}
F.prototype = base.prototype;
derived.prototype = new F();
derived.prototype.constructor = derived;
};
据我所知,你不能从数组继承。一旦你创建了一个构造函数,它的实例就会成为对象。当您需要数组的功能时,不如创建一个数组并在其上添加您想要的方法。这可以通过一个函数来完成:
function createExtendedArray () {
var a = [];
a.method1 = function() {};
return a;
}
/* Whosebug needs a console API */ console.log = function(x) { document.write(x + "<br />"); };
B = function() {}
B.prototype = Array.prototype;
var a = new Array();
var b = new B();
a[0] = 1;
b[0] = 1;
console.log(JSON.stringify(a));
console.log(JSON.stringify(b));
JSON 将子类字符串化为对象 ( { "0": 1 }
) 而不是数组 ( [1]
)`
有什么方法可以修改这种行为吗?
编辑
我正在使用(不可协商)ES5。我稍微简化了示例。实际上,子类化是通过函数 inherit()
设置的,它执行以下操作:
var inherit = function(base, derived) {
function F() {}
F.prototype = base.prototype;
derived.prototype = new F();
derived.prototype.constructor = derived;
};
据我所知,你不能从数组继承。一旦你创建了一个构造函数,它的实例就会成为对象。当您需要数组的功能时,不如创建一个数组并在其上添加您想要的方法。这可以通过一个函数来完成:
function createExtendedArray () {
var a = [];
a.method1 = function() {};
return a;
}