Cross-browser Getter和Setter

问题描述 投票:0回答:5

这在现代镀铬/Firefox/Opera中工作,但在IE8中失败。没有在IE9中尝试过。如何使此跨浏览器兼容,包括IE7+? (这里的小提琴。)

var foo = { 
    get test(){ return 'Works'; } 
};

// foo.test should be 'Works'
我已经看到了一些用法,但这在IE8中引发了“未识别的方法”错误。

为IE6/7/8来说,是

工作。我进行了测试,它运行良好!
javascript internet-explorer cross-browser getter getter-setter
5个回答
18
投票
update:链接断开,您可以在此处看到我的测试中的代码:

__defineGetter__

我不相信你可以。
in

4
投票
且较低,属性访问仅仅是属性访问。没有明确调用函数的情况下运行功能代码。

我认为在IE8中,您可以使用DOM元素,但我认为它不适用于常规本机对象。

有一种“定义”方法,它基本上允许您在对象上创建访问者方法(getters / setter),而无需调用诸如setProp() / getProp()的函数调用。

语法有点奇怪,但我已经能够将其用于Firefox,Chrome,Safari和Ie9。

,我有名为“人”的JavaScript对象。

IE8


3
投票
here。

您不能,在未实施它的浏览器中不支持该语法。您将在没有CBC问题的情况下使用该语法要花很长时间。要感激IE6在北美几乎死了。

如果您不介意使用DOM元素,则可以在IE8中执行此操作,而无需向DOM添加任何实际元素:

function Person()
{
 // set a default value //
    this.__name = 'John';
 // add getter & setter methods //
    Object.defineProperty(this, "name", {
        get: function() {
        // additional getter logic
            return this.__name;
        },
        set: function(val) {
            this.__name = val;
        // additional setter logic
        }
    });
}

var p = new Person();
console.log(p.name); // 'John'
p.name = 'Stephen';
console.log(p.name); // 'Stephen'

var foo = document.createElement('div'); Object.defineProperty(foo, 'test', {get:function(){return "Works"}}); foo.test// Works 除了是DOM元素之外,在大多数可以接受属性和方法的方式上只是一个普通对象。

如果您想要交叉浏览器支持,则可以使用/捕获:

1
投票
foo


0
投票
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.