Sha*_*ane 20 javascript getter-setter defineproperty
询问Object.defineProperty,如下所示:
function testComponent(){
var testProperty;
Object.defineProperty(this, "testProperty",
{
get : function()
{
return testProperty;
},
set : function(val)
{
testProperty = val;
}
});
}
Run Code Online (Sandbox Code Playgroud)
它会像这样使用的地方:
testObject = new testComponent();
testObject.testProperty = "testValue";
Run Code Online (Sandbox Code Playgroud)
基于我到目前为止看到的,看起来没有跨浏览器解决方案,因为我尝试使用es5-shim没有运气,但我想证实.我也发现了对这篇文章的引用,我的测试在IE 7和8中仍然失败,任何人都可以对此有所了解吗?
我记得几个月前在S/O的某个地方查看了一个相关的问题,我想我看到有人在答案中为此写了一个解决方案.任何关于getter/setter的一般解决方法也将受到赞赏.我的想法是,我需要在对象上使用一些等效的getter setter而不通过方法传递参数更改.我不需要IE6,但我想支持IE7 + ff 3.6+等范围内的浏览器
(这些在我的机器上的所有浏览器中传递,除了IE 7和8
直接使用defineProperty,没有垫片:http:
//jsfiddle.net/uSYFE/
使用ES5垫片小提琴,我假设我需要做的就是包括它? :http:
//jsfiddle.net/hyperthalamus/ntwDy/
使用IE推荐的解决方案小提琴:http:
//jsfiddle.net/hyperthalamus/xfvz3/
Flo*_*ine 18
根据ES5-shim:
/!\ Object.defineProperty
此方法将无声地设置"可写","可枚举"和"可配置"属性.
在描述符上提供带"get"或"set"的getter或setter将在缺少"defineGetter"和"defineSetter"的引擎上静默失败,其中包括到目前为止版本8的所有IE版本.
IE 8提供了此方法的一个版本,但它仅适用于DOM对象.因此,将不会安装填充程序,并且尝试设置"值"属性将在非DOM对象上静默失败.
所以你知道你的答案.它可以在DOM元素上完成,就是它(仅在IE8上).
如果你想让IE7工作,我建议你只使用get/set方法.
| 归档时间: |
|
| 查看次数: |
12190 次 |
| 最近记录: |