我需要设置一些动态设置器并想使用defineProperty。
但是我不知道为什么这不起作用。请注意,有人在另一个问题中写道,他们得到了它的工作,但他们的例子对我也不起作用......
var a = { q:1, b:2, c:3, d:4, e:5, f:9 }
var iFaces = [ {}, {}, {}, {} ]
for( key in a )
{
console.log( key );
for( var l = iFaces.length - 1; l >= 0; --l )
{
(function( that, name )
{
Object.defineProperty
(
that
, name
, {
enumerable : true
, configurable: true
, set : function( value ){ that[ name ] = value }
}
)
}
)( iFaces[ l ], key )
iFaces[ l ][ key ] = a[ key ]
}
}
// output: RangeError: Maximum call stack size exceeded
它必须以某种方式递归。
编辑:我尝试实现的功能是 2 个使属性保持同步的对象。所以我想创建一个通用设置器,如果没有相同的引用/值,它会更新姐妹对象。
我需要符合 ES5 标准的解决方案,而且似乎大多数替代 setter/getter 都是依赖于实现的 hack。