0

私は使用を拒否し__defineProperty__、代わりに代替構文{get X() {}}を好みます

ただし、これは IE では機能しません。

ブラウザの検出は別として、ブラウザが新しい構文をサポートしていることを検出できる最良の方法は何ですか?

編集:実際には特にIEを検出しようとはしていませんが、「 get X(){}構文をサポートしていないブラウザー」をnotsupported.htmlにリダイレクトします。私はそれを行う方法がいくつかあると信じており、それに取り組んでいますが、誰かが以前にこの問題を抱えていて解決策を持っている場合に備えて..

編集 2: ところで、誰も (私以外の) get X(){}構文を使用していないという意味ではありません。

4

3 に答える 3

2

他の人が指摘しているように、古い (現在の!) ブラウザーに新しい構文を受け入れるよう強制することはできません。では、ブラウザ検出をどうしますか? 古いブラウザーには古い構文を使用し、それ以外の場合は新しい構文を使用しますか? 次に、同じコードを 2 回書いています。

サポートする必要のある一連のブラウザーを決定し、それらがすべて保証できる機能を決定してから、それらの機能に制限します。それがWeb開発の仕組みです。

于 2011-04-20T15:37:47.267 に答える
1

一般的に実装されていない ES5 機能を使用したい。

一般的な JavaScript インタープリターが認識できない構文を使用したい

それをエミュレートする方法はありません。

私はあなたがちょうど使用することをお勧めします

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

ベンチマークを確認すると. 次に、ES5 を使用すると 15 倍遅くなることがわかります。ES3に固執するだけです。

IE8 ではゲッターをエミュレートする方法がないため、これについてできることはほとんどありません。

于 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 に答える