Отслеживать, изменился ли объект - PullRequest
6 голосов
/ 10 мая 2011
// A simple Javascript Object / String
var object = "hello";

// Imagine a button in the DOM, and if it's clicked the object value will change
document.getElementById("button").onclick = function(){
   window.object = "hello world";
}

// Now I would like to track and do something when the object is changed, ex:
object.onreadystatechange = function(){
   alert(object);
}

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

Ответы [ 5 ]

6 голосов
/ 10 мая 2011

Javascript не позволяет вам устанавливать программные точки наблюдения / события для произвольных объектов / переменных.

Вы можете использовать инкапсуляцию, чтобы скрыть отдельные значения внутри объекта от внешнего мира, позволяя изменять их только с помощью специальных «установочных» функций, имеющих желаемые побочные эффекты.

5 голосов
/ 10 мая 2011

Ну, вы можете сделать это действительным объектом с помощью методов get и set:

// A simple Javascript Object 
var object = new (function(){
    this.text = 'hello';

    this.setText = function(msg){
         this.text = msg
         //on change event
    }
})();

// Imagine a button in the DOM, and if it's clicked the object value will change
document.getElementById("button").onclick = function(){
   object.setText('New Text');
}

Вот демонстрационная скрипка: http://jsfiddle.net/maniator/BSYpz/

4 голосов
/ 10 мая 2011

Вы можете отслеживать объект JavaScript с помощью методов получения и установки, как описано здесь,

http://ejohn.org/blog/javascript-getters-and-setters/

Вы также можете посмотреть,

Javascript геттеры и сеттеры для чайников?

3 голосов
/ 27 февраля 2013

Последние версии Google Chrome (например, бета с включенным флагом «Включить экспериментальный JavaScript») поддерживают API Object.observe ().Больше информации на ОТВЕТИТЬ НА ИЗМЕНЕНИЕ С OBJECT.OBSERVE и рабочий пример

3 голосов
/ 10 мая 2011

Независимо от того, какую инфраструктуру вы хотите использовать, нет никакого волшебства для автоматического запуска события при изменении свойства. В вашей ситуации вам, вероятно, следует сделать так, чтобы объект окружал эти данные и предоставлял только методы get и set для них:

var something = function()
{
    var value = 10;

    this.getValue = function()
    {
        return value;
    }

    this.setValue = function(newValue)
    {
         ValueChanging(value, newValue);
         value = newValue;
    }

    var ValueChanging = function(old, new)
    {
         // Do Something
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...