以下是关于Object.defineProperty的问题:
function testComponent(){
var testProperty;
Object.defineProperty(this, "testProperty",
{
get : function()
{
return testProperty;
},
set : function(val)
{
testProperty = val;
}
});
}
它将被用于以下场景:
testObject = new testComponent();
testObject.testProperty = "testValue";
根据我目前所见,似乎没有跨浏览器的解决方案,因为我尝试使用es5-shim没有成功,但我想确认一下。我还发现了一个参考this post,但我的测试在IE 7和8中仍然失败,有人能否解释一下?
我记得几个月前在S/O的某个相关问题中看到过有人在答案中编写了解决方案。也欢迎提供任何通用的getter/setter解决方法。我的想法是需要在对象上有一些等效于getter/setter的东西,而不需要通过方法传递参数更改。我不需要支持IE6,但我希望支持IE7+ ff 3.6+等浏览器。
以下是QUnit测试: (jsFiddles)
(除IE 7和8外,这些在我的计算机上的所有浏览器中都通过)
直接使用defineProperty,无需shims::
http://jsfiddle.net/uSYFE/
使用ES5 shim的fiddle,我假设我只需要包含它即可? :
http://jsfiddle.net/hyperthalamus/ntwDy/
使用IE推荐解决方案的fiddle :
http://jsfiddle.net/hyperthalamus/xfvz3/