Javascript中的动态属性getter / setter?

时间:2010-08-16 10:09:07

标签: javascript

存储(localStorage,sessionStorage)允许使用任意属性。例如。你可以做到

localStorage.foo = 'bar';

而不是

localStorage.setItem('foo', 'bar');

我自己的javascript对象可以有相同的行为吗?我想在尝试设置属性时执行一些代码。

注意:我显然知道我可以创建setter,但这对于我事先不知道名字的属性不起作用。

注意#2 :经过对spec的一些检查后,我发现除非已经使用setItem设置了密钥,否则它并不能保证这是可行的。 ):

  

Storage对象上受支持的命名属性的名称是当前与对象关联的列表中存在的每个键/值对的键

我也可以自己实现这种行为,只要第一组通过动态定义getter / setter来完成一个方法。

1 个答案:

答案 0 :(得分:2)

您可以使用__defineGetter__()__defineSetter__(),但不幸的是,它们是Javascript 1.5的Mozilla扩展程序,因此它们仅适用于某些浏览器(最新版本的Firefox,Opera和Safari)。< / p>

More information and some examples here

除此之外,无法在对象上设置/获取属性时添加自定义行为。