跨浏览器的 Getter 和 Setter
这在现代 Chrome/Firefox/Opera 中有效,但在 IE8 中失败。 IE9没试过。我怎样才能使这个跨浏览器兼容,包括IE7+? (在这里小提琴。)
var foo = {
get test(){ return 'Works'; }
};
// foo.test should be 'Works'
我已经看到了 __defineGetter__
的一些用法,但这引发了“无法识别的方法” ' IE8 中的错误。
This works in modern Chrome/Firefox/Opera but fails in IE8. Haven't tried it in IE9. How can I make this cross-browser compatible, including IE7+? (Fiddle here.)
var foo = {
get test(){ return 'Works'; }
};
// foo.test should be 'Works'
I've seen some usage with __defineGetter__
but that threw an 'unrecognized method' error in IE8.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这是 IE6/7/8 的解决方法。我进行了测试,效果非常好!
更新:链接已损坏,您可以在此处查看我的测试代码:
Here is the workaround for IE6/7/8. I performed the test and it works very well!
Update: The link is broken, you can see the code of from my testing here:
我不相信你可以。
在 IE8 及更低版本中,属性访问仅仅是属性访问。如果不显式调用函数,则无法运行函数代码。
我认为在 IE8 中你也许可以使用 DOM 元素,但我不相信它适用于常规的本机对象。
I don't believe you can.
In
IE8
and lower, property access is mere property access. There's no way to run function code without explicitly invoking the function.I think in IE8 you may be able to with DOM elements, but I don't believe it works for regular native objects.
有一个“definePropery”方法,本质上允许您在对象上创建访问器方法(getter/setter),而无需调用像 setProp() / getProp() 这样的函数调用。
语法有点奇怪,但我已经能够让它在 Firefox、Chrome、Safari 和 IE9 上运行。
假设我有一个名为“Person”的 JavaScript 对象。
有关 Mozilla 网站的更多信息此处。
There is a "definePropery" method that will essentially allow you to create accessor methods (getters/setters) on Objects without the need to invoke a function call like setProp() / getProp().
The syntax is a little weird but I've been able to get this to work on Firefox, Chrome, Safari and IE9.
Say I have JavaScript Object called "Person".
More info on Mozilla's site here.
不能,未实现该语法的浏览器不支持该语法。您需要相当长的一段时间才能使用该语法而不会出现 CBC 问题。值得庆幸的是,IE6 在北美几乎已经消亡了。
You cannot, the syntax is not supported in browsers that did not implement it. Its going to be quite a while before you'll be able to use that syntax without having CBC problems. Be grateful IE6 is pretty much dead in North America.