我想创建一个数据对象类型的包装。我希望能够在其上时,改变有以下两个方面的影响包装定义属性:你可以使用setter在属性上添加其他属性吗?
- 改变了包装的数据对应的属性值对象
- 将单独改变的记录到目前为止所有变化的列表
在最近了解到它的存在之后,好像JavaScript内置的getter和setter功能(特别是setter)是该工作的工具。这里有一个问题:我试图尽可能使其与现有的API大致相符,并且有问题的API字段不一定支持直接获取值,而是查询属性以查看它是否符合某些条件。
因此,例如,也许我有一个car
对象与财产car.color
。我希望能够通过只说car.color = "blue";
来设置此属性,但我也希望能够调用函数car.color.isBlue();
,该函数返回true,无论该属性的值是“蓝色”还是“蓝色”或“#0000FF”或是任何我宁愿包装在一个函数中的案例数量,而不是直接与每次的值进行比较。
我当然可以很容易地通过指定一个明确的property.set(value)
功能做到这一点,但在我看来,这样是最好的,如果可能避免冗余代码:感觉比=
分配不太自然,并删除之间的(IMO)漂亮的语法区别修改属性并查询它。
这感觉就像JavaScript(作为一般的精神事物)应该足够灵活以支持,但我没有试过的东西实际上已经工作。那么,这实际上是可能的吗?更主观地说,如果答案是肯定的,是否有什么令人信服的理由说明我为什么不应该这样做?
哈,辉煌!不知道为什么没有发生在我身上。现在唯一棘手的部分是确保我能够正确确定范围,因为我将为很多属性填充非常类似的函数,并且我希望保持DRY ...尽管如此,还是一个不同的问题,我希望我能回答自己。干杯! – endemic