为什么子类数组的JSON字符串化是一个对象?

时间:2015-11-11 06:34:31

标签: javascript arrays json subclass stringify



/* StackOverflow 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));
&#13;
&#13;
&#13;

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;
};

1 个答案:

答案 0 :(得分:0)

据我所知,你不能从数组继承。一旦创建了构造函数,它的实例就是对象。当您需要数组的功能时,而是创建一个数组并在其上添加您想要的方法。这可以通过以下功能完成:

function createExtendedArray () {
    var a = [];

    a.method1 = function() {};

    return a;
}