вопрос о наследовании массива в javascript - PullRequest
2 голосов
/ 25 марта 2011
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 ]

3 голосов
/ 25 марта 2011

Это не совсем способ заставить Array.prototype наследоваться от ваших объектов.Это переписало бы Array.prototype, что явно не разрешено.

Однако вы можете расширить прототип массива со свойствами / методами ClassA / ClassB следующим образом:

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 голос
/ 25 марта 2011

Стандарт запрещает перезапись Array.prototype:

Начальное значение Array.prototype является прототипом объекта Array (15.4.4).
Это свойство имеет атрибуты {[[Writable]]: ложь, [[Enumerable]]: ложь, [[Настраиваемый]]: false}.

Вы можете легко убедиться, что браузеры соответствуют этому:

var origArrayProto = Array.prototype;
Array.prototype = new function () {}; // try to overwrite
alert(Array.prototype == origArrayProto); // true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...