为什么子类数组的 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;
}