Удаление значения переменной без потери ее дочерних методов - PullRequest
0 голосов
/ 09 марта 2012

Я пытаюсь удалить значение массива, без удаления его методов. Рассмотрим следующий код:

var Project = function () {

    //The array where all data will be stored before they are sent..
    this.data = [];

    // ... Along with a function to send data to other source ...
    this.data.send = function () {
    }

    //Here is where the data would be altered ...

    //Send the data ...
    this.data.send();

    //Remove the data, we don't want it when sending the next time ...
    this.data = [];
    // ... but this (obviously) results in the removal of the send() function ... :-(
}

, которая также удалит функцию .send(), а это не то поведение, которое я ищу. Какой самый плавный и правильный способ избежать этой проблемы? Спасибо!

Ответы [ 3 ]

3 голосов
/ 09 марта 2012

Предложение Сирко должно сработать, но, на мой взгляд, ваша проблема указывает на недостаток дизайна.

Почему бы не предоставить массив, подобный объекту, с методами, которые никогда не изменяются, но имеют внутренний массив, которым он может манипулировать по желанию.

var data = {
  items: [],
  push: function(item) {
    this.items.push(item);
  },
  send: function() {
    // send the items
    this.items = [];
  }
}

data.push('abc');
data.send();
console.log(data.items.length) // 0

Пусть массивы будут массивами и используют другие конструкции для манипулирования ими.

2 голосов
/ 09 марта 2012

С this.data = []; вы заменяете старый объект массива новым и таким образом теряете все присоединенные функции. Вы должны изменить существующий объект, чтобы сохранить свойства. Например, вы можете использовать splice ( document @ MDN ):

this.data.splice( 0, this.data.length );

В качестве альтернативы, как предлагает Эллиот Бонневиль, вы можете установить длину на ноль ( снова @ MDN )

this.data.length = 0;
1 голос
/ 09 марта 2012

Вы можете просто сделать:

this.data.length = 0;

И тогда ваш существующий массив будет пустым с сохранением всех остальных свойств. Вот интересная ссылка об использовании массивов JavaScript.

...