2013-10-09 7 views
1

Есть ли способ перехватить или переопределить сетку? Например:Значение массива перехвата Javascript

var array = []; 
array[2] = 10; 
var myInterceptor = function(index, newVal) { 
    do stuff when the array value at index is changed. 
} 

Поэтому я хочу, чтобы myInterceptor вызывался при выполнении второй строки. Я надеюсь найти способ сделать это с помощью Object.defineProperty()

ответ

0

К сожалению, это not possible to override the [] accessor for javascript arrays. Однако есть еще несколько возможностей:

1) Override the push() method. Это разумно сделать для отдельного экземпляра массива, но настоятельно рекомендуется, чтобы вы НЕ изменяли Array.prototype.push, так как это может привести к непредвиденным побочным эффектам в других частях кода javascript.

2) Добавить заказ set() метод. Опять же, пока вы можете добавить это в основной массив Array, настоятельно рекомендуется, чтобы вы этого не сделали. Функционирование jsFiddle: http://jsfiddle.net/dmillz/RUcBM/

arr.set = function (index, value) { 
    var oldValue = this[index]; 
    this[index] = value; 
    $.event.trigger("array-change", [this, index, oldValue, value]); // jQuery event trigger, but feel free to use something else besides jQuery  
}; 

3) (рекомендуется) Создайте свой собственный наблюдаемый класс, который опирается на массив, или просто использовать библиотеку, которая обеспечивает наблюдаемые объекты, такие как Knockout's Observable Array, Ember's Observable или Backbone's Model