0

我拒绝使用__defineProperty__,而是更喜欢替代语法{get X() {}}

但是,这不适用于 IE。

除了浏览器检测之外,我可以检测到浏览器是否支持新语法的最佳方法是什么?

编辑:好的,实际上我并没有特别尝试检测 IE,而是将那些“不支持get X(){}语法的浏览器”重定向到notsupported.html。我相信有一些方法可以做到这一点并且正在努力,但如果有人之前已经遇到过这个问题并且有解决方案..

编辑 2:顺便说一句,这是否意味着没有人(除了我之外的人)使用get X(){}语法,因为它不受所有人支持(或尚不被 5 个主要浏览器支持)?

4

3 回答 3

2

正如其他人所指出的,您不能强制较旧的(当前!)浏览器接受较新的语法。您将如何处理浏览器检测?对旧浏览器使用旧语法,否则使用新语法?然后你要写两次相同的代码。

确定您需要支持的一组浏览器,确定它们都可以向您保证哪些功能,然后将自己限制在这些功能上。这就是 Web 开发的工作原理。

于 2011-04-20T15:37:47.267 回答
1

你想使用一个不常用的 ES5 特性。

使用普通 javascript 解释器无法识别的语法。

没有办法模仿它。

我建议你只使用

{
    getX: function() { ... }
}

如果你检查基准。然后你会看到使用 ES5 慢了 15 倍。坚持使用 ES3。

您对此无能为力,因为在 IE8 中无法模拟 getter。

于 2011-04-20T15:26:03.807 回答
0

尝试这个:

function browserSupportsGetterAndSetterSyntax() {
  try {
    return eval('({ get x() { return 3; }}).x') == 3;
  } catch (e) {
    return false;
  }
}
于 2012-09-06T00:56:15.463 回答