javascript variable Object.watch()適用於所有瀏覽器?




object.observe is not a function (6)

我正在尋找一種簡單的方法來監視對像或變量的變化,並且我發現了Object.watch() ,它在Mozilla瀏覽器中受支持,但不支持IE。 於是我開始四處搜尋,看看有沒有人寫過某種類似的東西。

關於我發現的唯一一件事是一個jQuery插件 ,但我不確定這是否是最好的方法。 我在大多數項目中肯定使用jQuery,所以我不擔心jQuery方面的問題......

無論如何,這個問題:有人可以給我看一個這個jQuery插件的實例嗎? 我在解決問題方面遇到了問題......

或者,有沒有人知道任何可以跨瀏覽器工作的更好的替代方案?

答案後更新

感謝大家的回應! 我嘗試了這裡發布的代碼: http://webreflection.blogspot.com/2009/01/internet-explorer-object-watch.html : http://webreflection.blogspot.com/2009/01/internet-explorer-object-watch.html

但我似乎無法讓它與IE一起工作。 下面的代碼可以在Firefox中正常工作,但在IE中什麼也不做。 在Firefox中,每次更改watcher.status ,都會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>");



(對不起,交叉發布,但這個答案我給類似的問題在這里工作很好)

前段時間我為此創建了一個小對象 。 它適用於IE8,Safari,Chrome,Firefox,Opera等。



你可以使用Object.defineProperty

foo觀看bar

Object.defineProperty(foo, "bar", {
  get: function (val){
      //some code to watch the getter function
  },

  set: function (val) {
      //some code to watch the setter function
  }
})

該插件只是使用計時器/間隔來重複檢查對像上的更改。 也許夠好,但我個人希望作為觀察者更直接。

這裡是一個嘗試帶來watch /不unwatch IE: http://webreflection.blogspot.com/2009/01/internet-explorer-object-watch.html : unwatch

它確實改變了Firefox添加觀察者的方式。 代替 :

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

你做:

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

沒有那麼甜蜜,但作為觀察員,您立即得到通知。





javascript-events