Объект.смотреть() для всех браузеров?



пожалуйста, не забудьте прочитать все комментарии ниже. Объект.Смотрите и возражайте.Наблюдать как устаревшие. См. комментарий Эллиота Б для обновленного (по состоянию на июнь 2018 года) метода.





Я искал простой способ контролировать объект или переменную для изменений, и я нашел Object.watch(), это поддерживается в браузерах Mozilla, но не IE. Поэтому я начал искать вокруг, чтобы увидеть, если кто-то написал какой-то эквивалент.



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



в любом случае, вопрос: Может ли кто-нибудь показать мне рабочий пример этого плагина jQuery? У меня возникли проблемы с его работой...



или, кто-нибудь знает о каких-либо лучших альтернатив, которые будут работать кросс-браузер?



обновление после ответы:



спасибо всем за ответы! Я попробовал код, размещенный здесь:
http://webreflection.blogspot.com/2009/01/internet-explorer-object-watch.html



но я не мог заставить его работать с IE. Приведенный ниже код отлично работает в Firefox, но ничего не делает в IE. В Firefox, каждый раз watcher.status изменен,document.write() на watcher.watch() вызывается, и вы можете увидеть вывод на странице. В IE этого не происходит, но я вижу, что watcher.status это обновление значения, потому что последний document.write() вызов показывает правильное значение (как в IE, так и в FF). Но, если функция обратного вызова не вызывается, то это бессмысленно... :)



Я что-то пропустила?



var options = {'status': 'no status'},
watcher = createWatcher(options);

watcher.watch("status", function(prop, oldValue, newValue) {
document.write("old: " + oldValue + ", new: " + newValue + "<br>");
return newValue;
});

watcher.status = 'asdf';
watcher.status = '1234';

document.write(watcher.status + "<br>");
535   7  

7 ответов:

(извините за кросс-постинг, но этот ответ я дал на аналогичный вопрос здесь работает нормально)

Я создал небольшой "объект".смотреть ШИМ для этого некоторое время назад. Он работает в IE8, Safari, Chrome, Firefox, Opera и др.

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

вот попытка принести watch/unwatch в IE: http://webreflection.blogspot.com/2009/01/internet-explorer-object-watch.html.

это не меняет синтаксис от того, как Firefox для добавления наблюдателей. Вместо:

var obj = {foo:'bar'};
obj.watch('foo', fooChanged);

вы делать:

var obj = {foo:'bar'};
var watcher = createWatcher(obj);
watcher.watch('foo', fooChanged);

не так сладко, но как наблюдатель вы будете уведомлены немедленно.

Текущий Ответ

использовать новый Прокси объект, который может наблюдать изменения в его цели.

let validator = {
    set: function(obj, prop, value) {
        if (prop === 'age') {
            if (!Number.isInteger(value)) {
                throw new TypeError('The age is not an integer');
            }
            if (value > 200) {
                throw new RangeError('The age seems invalid');
            }
        }

        // The default behavior to store the value
        obj[prop] = value;

        // Indicate success
        return true;
    }
};

let person = new Proxy({}, validator);

person.age = 100;
console.log(person.age); // 100
person.age = 'young'; // Throws an exception
person.age = 300; // Throws an exception

старый ответ от 2015

вы могли бы использовать

ответы на этот вопрос немного устарели. "объект".смотрите и

обратите внимание, что в Chrome 36 и выше вы можете использовать Object.observe как хорошо. Это на самом деле часть будущего стандарта ECMAScript, а не специфичная для браузера функция, такая как Mozilla Object.watch.

Object.observe работает только со свойствами объекта, но намного более эффективен, чем Object.watch (который предназначен для отладки, а не для использования в производстве).

var options = {};

Object.observe(options, function(changes) {
    console.log(changes);
});

options.foo = 'bar';

можно использовать

Я также думаю, что сейчас лучшее решение-использовать часы.JS, найти хороший учебник здесь:слушайте / наблюдайте за изменениями объектов или массивов в Javascript (событие изменения свойств объектов Javascript)

Comments

    Ничего не найдено.