所有浏览器的Object.defineProperty?

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+等范围内的浏览器


下面的QUnit测试:(jsFiddles)

(这些在我的机器上的所有浏览器中传递,除了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对象上静默失败.

https://github.com/kriskowal/es5-shim/issues#issue/5

所以你知道你的答案.它可以在DOM元素上完成,就是它(仅在IE8上).

如果你想让IE7工作,我建议你只使用get/set方法.

  • Sadface,我说. (7认同)