这在现代镀铬/Firefox/Opera中工作,但在IE8中失败。没有在IE9中尝试过。如何使此跨浏览器兼容,包括IE7+? (这里的小提琴。)
var foo = {
get test(){ return 'Works'; }
};
// foo.test should be 'Works'
我已经看到了一些用法,但这在IE8中引发了“未识别的方法”错误。
为IE6/7/8来说,是工作。我进行了测试,它运行良好!
我认为在IE8中,您可以使用DOM元素,但我认为它不适用于常规本机对象。
有一种“定义”方法,它基本上允许您在对象上创建访问者方法(getters / setter),而无需调用诸如setProp() / getProp()的函数调用。语法有点奇怪,但我已经能够将其用于Firefox,Chrome,Safari和Ie9。 ,我有名为“人”的JavaScript对象。
IE8
您不能,在未实施它的浏览器中不支持该语法。您将在没有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元素之外,在大多数可以接受属性和方法的方式上只是一个普通对象。
foo