2

假设我有一个类似于以下的对象:

Cars = {
    "car_one": {
        data: {
            make: "Ford",
            model: "Festiva"
        },
        img: "car_one.jpg"
    },
    "car_two": {
        data: {
            make: "Chevy",
            model: "Pinto",
            color: "Green"
        },
        img: "car_two.jpg"
    }
    ...and so on...
}

我希望找到一种方法来监视data属性(和所有子属性)的更改,然后能够设置一个函数来触发。

我一直在查看Object.watch()但测试似乎表明我需要手动设置它来检查每个属性Cars.{some_car}.data(如我的示例所示)不是一个常量集。我想我希望有一种我不知道的不太复杂的方法。

4

2 回答 2

1

根据您对其调用方式的控制程度,您可以创建一个访问器函数。该函数可以将一个对象作为参数,如果设置了参数,则将该对象设置为当前值。为了您的使用,您可以在此处添加某种类型的触发器。如果没有传递参数,它将返回当前值。

这就是淘汰赛使用效果很好的 API 类型。

在现代浏览器中,getter 和 setter使这很容易。对于较旧的值,您可以拥有一个访问属性,然后是另一个用作数据持有者的属性。

于 2013-04-08T01:16:43.717 回答
1

不幸的是,截至今天,最简单的方法可能是循环访问属性data并调用Object.watch它们中的每一个。但是,我们最终可能会Object.observe进行救援。如果您正在寻找跨浏览器的Obect.watch实现,请查看此处

其他替代方法是将您的数据包装在一个可观察的对象中,该对象允许通过通用set方法修改数据,该方法会在修改某些属性时触发事件,或者让某些属性监视任务以特定间隔执行或由特定操作触发这将检查对象的更改。然而,这些替代方案并不简单。

于 2013-04-08T01:18:07.137 回答