关于在javascript中继承Array的问题

时间:2011-03-25 07:15:49

标签: javascript arrays inheritance

function ClassA()  
{  
    this.a=[];
    this.aa=100;  
}  


function ClassB()  
{  
    this.b=function(){return "classbb"};  
}  
ClassB.prototype=new ClassA();  
Array.prototype= new ClassB();  
var array1= new Array();
alert(array1.b());

为什么Array不能继承ClassA和ClassB?感谢。

2 个答案:

答案 0 :(得分:3)

这不是让Array.prototype继承你的对象的方法。它会覆盖Array.prototype,这显然是不允许的。

然而,您可以使用ClassA / ClassB的属性/方法扩展 Array的原型,如下所示:

function ClassA() {  
  this.a=[];
  this.aa=100;  
}  

function ClassB() {  
  this.b=function(){return "classbb"};  
}

ClassB.prototype = new ClassA; 

var instB = new ClassB;
for (var l in instB){
    Array.prototype[l] = instB[l];
}

var array1 = [];
alert(array1.aa);

你也可以:

Array.prototype.classb = new ClassB;
var array1 = [];
alert(array1.classb.aa);

答案 1 :(得分:1)

The standard禁止覆盖Array.prototype

  

Array.prototype的初始值   是Array原型对象   (15.4.4)。
  这家酒店有   attributes {[[Writable]]:false,   [[Enumerable]]:false,   [[Configurable]]:false}。

您可以轻松验证浏览器是否符合以下条件:

var origArrayProto = Array.prototype;
Array.prototype = new function () {}; // try to overwrite
alert(Array.prototype == origArrayProto); // true