2010-08-16 131 views
4

存储(localStorage,sessionStorage)允许使用任意属性。例如。你可以做的Javascript中的动态属性getters/setters?

localStorage.foo = 'bar'; 

代替

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

我自己的JavaScript对象可以有相同的行为?当试图设置属性时,我想执行一些代码。

注意:我明显知道我可以创建setters,但是这对名字我不知道的属性是无效的。

注意2:一个位spec的检查后,我发现它并没有真正保证,这将工作,除非该键已经被设定setItem():

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

我也可以自己实现这种行为,只要第一组通过一个方法,通过动态确定获得者/设定者。

回答

2

您可以使用__defineGetter__()__defineSetter__(),但不幸的是它们是Mozilla对Javascript 1.5的扩展,所以它们仅在某些浏览器(Firefox,Opera和Safari的最新版本)中可用。

More information and some examples here

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

+0

还有新的ECMAScript 5 getters和setters,目前正在进入新的浏览器。 – 2010-08-16 11:08:07