Расширение массива Javascript дополнительными методами и синтаксическим сахаром - PullRequest
4 голосов
/ 17 февраля 2011

Мне нужен массив для хранения некоторых геометрических данных.Я хотел бы просто наследовать от объекта Array, а затем расширить его с помощью нескольких новых функций, таких как «высота» и «ширина» (сумма всех высот / ширины детей), а также с несколькими удобными методами, такими как «insertAt» или «remove ".

Как лучше всего это сделать без изменения исходного объекта Array (Array.prototype.myMethod)?

Ответы [ 3 ]

5 голосов
/ 17 февраля 2011

Вы всегда можете смешать свои изменения непосредственно в массиве, но это может быть не лучшим выбором, учитывая, что это не то, что должен иметь каждый массив. Итак, давайте наследуем от Array:

// create a constructor for the class
function GeometricArray() {
   this.width = 0;
   this.height = 0;
}

// create a new instance for the prototype so you get all functionality 
// from it without adding features directly to Array.
GeometricArray.prototype = new Array();

// add our special methods to the prototype
GeometricArray.prototype.insertAt = function() {
  ...
};

GeometricArray.prototype.remove = function {
  ...
};

GeometricArray.prototype.add = function( child ) {
   this.push( child );
   // todo calculate child widths/heights
};
2 голосов
/ 17 февраля 2011

Применяете ли вы (возможно) концепции Java в Javascript?

Вам не нужно наследовать от классов в Javascript, вы просто обогащаете объектов .

Итак, лучший способ в моем мире (мире, полном людей насмешливых методов в объекты) - это:

function GeometricArray()
{
  var obj=[]

  obj.height=function() {
    // wibbly-wobbly heighty things

    for(var i=0;i<this.length;i++) {
      // ...
    }

  }

  obj.width=function() {
    // wibbly-wobbly widy things
    // ...
  }

  // ...and on and on...

  return obj
}
1 голос
/ 17 февраля 2011

Вы можете использовать прототипирование, чтобы поместить эти функции в массив.

Чтобы добавить функцию высоты, например, сделайте следующее:

Array.prototype.height = function() {
    //implementation of height
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...