2015-07-31 3 views
1

Как создать событие, когда содержимое массива javascript изменяется, то есть событие должно генерироваться при выполнении push или pop операций над этим конкретным массивом javascript. В принципе, я хочу отслеживать операции push, pop, выполняемые над конкретным массивом javascript.Генерация события на массиве javascript

Редактировать: - Решения, указанные в комментариях, требуют переопределения метода push или pop. Я хочу выполнить это, не делая этого.

+1

[Возможный дубликат Как наблюдать за изменениями массива?] (Http://stackoverflow.com/questions/5100376/how-to-watch-for-array-changes) – yakutsa

ответ

0

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

var someArray = []; // a normal array 

someArray.push = function() { // this will override the original push method 
    // custom code here 
    console.log('pushing something..'); 
    return Array.prototype.push.apply(this, arguments); // original push 
}; 
// now everytime you push something a message will be logged. Change this functionality as you like. 

Примечание: someArray.push() будет теперь перечислим. Если вы хотите предотвратить это, вы можете определить свойство «push», используя метод Object.property.

Object.defineProperty(someArray, 'push', { 
    enumerable: false, // it's false by default anyway 
    value: function() { 
    console.log('pushing something..'); 
    return Array.prototype.push.apply(this, arguments); 
    } 
}); 
+0

Попробую второй метод. Кажется интересным. –

0

Я думаю, что нет собственного способа сделать это. Эта тема также обсуждалась here, и предлагаемое решение заключалось в том, чтобы реализовать класс-оболочку для ваших массивов.

Другим способом было бы реализовать только функцию обертки push и вызвать событие при вызове функции.

Смежные вопросы