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?感谢。
答案 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