如何观察一系列对象的变化



javascript现在实现object.observe and array.observe,但是我似乎找不到合并功能的方法。

我要做的是拥有一系列对象。当其中一个对象的任何属性更改时,我想通知。

object.observe允许我在特定对象的属性更改时通知我。

array.observe允许我在发生数组级别更改时通知我。

除非我特别观察数组的每个元素,否则我无法知道何时更改特定元素。

例如:

var model = [
  {
    data: 'Buy some Milk',
    completed: false
  },
  {
    data: 'Eat some Food',
    completed: false
  },
  {
    data: 'Sleep in a Bed',
    completed: false
  },
  {
    data: 'Make Love not War',
    completed: false
  }
];
Array.observe(model, function(changeRecords) {
  console.log('Array observe', changeRecords);
});
model[0].data = 'Teach Me to code';
model[1].completed = true;
model.splice(1,1);
model.push({data: "It's a new one!",completed: true});

给出:

的控制台输出
Array observe [Object, Object]
  0: Object
    addedCount: 0
    index: 1
    object: Array[4]
    removed: Array[1]
    type: "splice"
    __proto__: Object
  1: Object
    addedCount: 1
    index: 3
    object: Array[4]
    removed: Array[0]
    type: "splice"
    __proto__: Object
length: 2
__proto__: Array[0]

这两个通知特别涉及:

model.splice(1,1);

model.push({data: "It's a new one!",completed: true});

,但完全忽略

model[0].data = 'Teach Me to code';

model[1].completed = true;

无论是数组级别还是对象级别的变化,是否有一种方法可以观察每一个更改?

我知道有些库可能能够为我做到这一点,但是我想了解如何直接在我自己的代码中实现它。


编辑:好的,似乎我没有缺少任何魔术功能,唯一真正的选择是观察数组的各个元素。

因此,要扩展原始问题,适应元素观测值的最有效方法是什么?

数组观察观察数组变化!您需要使用object.observe!

观察数组中的每个对象

请参阅此

      function ObserveMyArray(myArray){
       var arr=myArray||[];
          for(var i=0;i<arr.length;i++){
            var item=arr[i];
        Object.observe(item , function(changes){
          changes.forEach(function(change) {
               console.log(change.type, change.name, change.oldValue);
           });
          });
         } 
       Array.observe(arr, function(changeRecords) {
         console.log('Array observe', changeRecords);
       });
        }

最新更新