Показать сообщение отдельно
  #7 (permalink)  
Старый 31.01.2009, 22:58
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Langalier,
Не совсем то, что я имел в виду, вот например попробуем создать конструктор myArray, который бы выдавал нам массив, но имел расширенные (перегруженные) методы работы с элементами. Далеко ходить не будем, возьмем функцию из статьи:
function extend(Child, Parent) {
    var F = function() { }
    F.prototype = Parent.prototype
    Child.prototype = new F()
    Child.prototype.constructor = Child
    Child.superclass = Parent.prototype    
}


Теперь напишем конструктор объектов myArray:
var myArray = function() {
    this.getLastElement = function() {
        return this[this.length-1];
    }
}

// И наследуем массив:
extend(myArray, Array);


Посмотрим, что получилось:
// Создадим наш объект:
var a = new myArray();

// Добавим ему элементов, через свойства:
a[0] = "Привет";
a[1] = "Мир";

// Пробуем
alert(a.getLastElement()); // undefined - ничего

// А длина?
alert(a.length); // 0 - пусто

// Теперь добавим через методы:
a.push("Пока");
a.push("Ад");

// Пробуем
alert(a.getLastElement()); // "Ад"

// А длина?
alert(a.length); // 2, все в порядке


Другими словами, вам не удастся наследовать всю функциональность массивов, когда добавление элемента напрямую увеличивало длину массива.
Ответить с цитированием