javascript - 所有浏览器的 Object.defineProperty?

标签 javascript getter-setter defineproperty

询问 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,无垫片 : http://jsfiddle.net/uSYFE/

fiddle 使用 ES5 垫片,我假设我需要做的就是包含它? : http://jsfiddle.net/hyperthalamus/ntwDy/

fiddle 使用 IE 推荐的解决方案 : http://jsfiddle.net/hyperthalamus/xfvz3/

最佳答案

根据ES5-shim :

/!\ Object.defineProperty

This method will silently fail to set "writable", "enumerable", and "configurable" properties.

Providing a getter or setter with "get" or "set" on a descriptor will silently fail on engines that lack "defineGetter" and "defineSetter", which include all versions of IE up to version 8 so far.

IE 8 provides a version of this method but it only works on DOM objects. Thus, the shim will not get installed and attempts to set "value" properties will fail silently on non-DOM objects.

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


所以你知道你的答案。它可以在 DOM 元素上完成,仅此而已(仅在 IE8 上)。
如果你想让 IE7 工作,我建议你只使用 get/set 方法。

关于javascript - 所有浏览器的 Object.defineProperty?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10282075/

相关文章:

Javascript IN 操作不适用于一项数组

javascript - 设置 jQuery 对话框按钮回调

javascript - 如何将值从 Javascript 生成的按钮传递到 Controller ?

javascript - javascript 代码中显示的 this.value 未定义消息

java - 如何获得@getter 和@setter?

node.js - 跨平台模块系统

java - 这种情况如何正确使用Getter

JAVA,setter 没有将发送到我的构造函数程序的值返回零

Typescript 装饰器和 Object.defineProperty 奇怪的行为

javascript - 将 Object.defineProperty 与 let 或 var 一起使用时会发生奇怪的事情