как запускать функцию при каждом вызове объекта

#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. итак, мне нужно, чтобы она сохранялась в массиве для каждой цепочки, поэтому после завершения цепочки и повторного вызова объекта я нахожу массив чистым