#javascript
#javascript
Вопрос:
Я создаю фреймворк Javascript, и вот в чем моя проблема: у меня есть объект и массив. Мне нужно очищать массив каждый раз, когда я вызываю объект.
var obj =
{
ary : [],
getById :function(id){ this.ary[ary.length]= document.getElementById(id); return obj; },
getByNames :function(names){ //loop over the names parameter and get element by names and then add these elements to the array; return obj; },
show :function(){// in here i loop over the array and show elements}
}
Все, что мне нужно знать, это как очищать этот массив каждый раз, когда я вызываю объект obj
//this works perfectly
obj.get('id').show();
//but when i recall it again like this in debugger mode i see the array have 2 elements not 1
obj.get('another id').show();
Все, что я хочу, это сделать так, чтобы при каждом вызове obj очищался массив.
мне нужно упомянуть, что в этом у меня будет цепочка, я имею в виду вот так
obj.GetById(«).getByNames(«);
итак, мне понадобится массив для каждой цепочки, а затем очистить его при следующем вызове объекта
с уважением
Ответ №1:
Если под «вызвать объект obj» вы подразумеваете, return obj;
тогда просто найдите и замените return obj;
на this.arr=[]; return obj;
, чтобы очищать массив при каждом возврате obj
.
Редактировать:
хорошо, итак, вы хотите очистить массив только при запуске новой цепочки. единственный способ, который я могу придумать, это сделать что-то вроде obj.clr().getById('').getByNames('');
и добавить clr: function() {this.ary=[]; return this;}
к obj
Комментарии:
1. вы правы, если нет цепочки, я возвращаю obj object для использования другого селектора, поэтому мне понадобится то, что в массиве в течение некоторого времени я редактировал свой вопрос, взгляните спасибо за ваш ответ
2. ваша идея хороша, но не может ли быть чего-то, чего разработчику не стоит очищать самостоятельно, как в jquery
3. ну, я думаю, что могу очищать массив за операцию, я имею в виду что-то вроде, когда он вызывает функцию show, массив очищается, но некоторое время некоторые операции возвращают что-то для цепочки, в противном случае селекторы
4. я не знаю никакого способа провести различие между
obj.getById(''); obj.getByNames('');
иobj.getById('').getByNames('');
5. это просто пример цепочки, например, jquery выполняет GetById, чтобы получить, например, контейнер, а затем getByNames, чтобы получить элементы с заданными именами внутри этого контейнера
Ответ №2:
Первая строка функции, которую вы могли бы выполнить this.arr.length = 0
, которая усечет массив, чтобы в нем не было никаких элементов.
Комментарии:
1. да, но мне нужно другое решение, скорее у меня будет много селекторов, которые мне понадобятся, чтобы некоторое время сохранять элементы в массиве, точно так же, как obj.GetById(«).getByNames(«) в этом случае мне понадобятся элементы в массиве для цепочки извините, что не упомянул об этом в вопросе 🙂 и спасибо за ваш ответ
2. итак, мне нужно, чтобы она сохранялась в массиве для каждой цепочки, поэтому после завершения цепочки и повторного вызова объекта я нахожу массив чистым