問題タブ [es5-shim]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - ECMAScript 5 (ES 5)-shim を提供するには?
ECMAScript 第 5 版 (2009 年 12 月リリース) では、多数の新しいメソッドが導入されています (詳細については、この表を参照してください)。ただし、これらの新しいメソッドを実装していない古いブラウザーがまだ存在します。
幸いなことに、(JavaScript で記述された) 便利なスクリプトES5-shimが存在します。これは、これらのメソッドが存在しない環境でこれらのメソッドを手動で実装します。
ただし、ES5-shim を提供する方法がわかりません...次のように、すべてのブラウザーに「提供」する必要があります。
または、次のように、本当に必要なブラウザだけを「困らせる」ためにチェックを含める必要があります。
(Function.prototype.bind
ブラウザがすべての新しい ECMAScript 5 メソッドを実装しているかどうかを確認するために使用しています。上記でリンクした互換性テーブルによると、bind
ECMAScript 5 メソッドの実装に関しては「最後の砦」です。)
もちろん、この shim を有効にするには、他のすべてのスクリプトの前に実行する必要があります。つまり、上記の SCRIPT 要素をページの早い段階 (HEAD 内、他のすべての SCRIPT 要素の前) に含める必要があります。
では、この 2 番目の例は、ECMAScript 5-shim をブラウザーに提供する良い方法でしょうか? それを行うより良い方法はありますか?
javascript - es5-shim と underscore.js?
JavaScript プロジェクトにes5-shim.jsとunderscore.jsの両方があります。
es5-shim.jsは、Internet Explorer や一部の古いブラウザー用の配列にreduce
や などの JavaScript ネイティブ関数を追加するだけです。some
underscore.js は、同じもの (ただし構文は異なります) と、さらに多くのもの (オブジェクトと配列のユーティリティ関数) を追加します。
ただし、es5-shim で追加された関数が存在する場合、underscore.js はそれらを使用します。
そのため、Firefox や Chrome などの「最近の」ブラウザーでは、underscore.js はブラウザーのネイティブ関数を使用します。純粋なJavaScript関数よりも優れていると思います。ただし、Internet Explorer では、underscore.js は es5-shim 関数を使用します。es5-shim.js を削除すると、underscore.js は独自の関数を使用します。
それについて何かアドバイスはありますか?プロジェクトから es5-shim を削除し、 underscore.js のみを使用する必要がありますか? それとも、underscore.js に es5-shim の関数を使用させるべきですか?
javascript - Requirejs shim config を使用する理由とタイミング
here APIからrequirejsドキュメントを読みました
しかし、私はシムの一部を取得していません。shim を使用する理由と設定方法を教えてください。
シムを使用する理由と時期を例を挙げて説明してください。ありがとう。
javascript - Object.getPrototypeOf が __proto__ に失敗する object.constructor.prototype シムに失敗する
いくつかのシム/ポリフィル ライブラリを調べたところ、Object.getPrototypeOf
. 存在しない場合、それらは使用に失敗し、__proto__
それが存在しない場合はobject.constructor.prototype
.
それ__proto__
は「非標準」であり、方法とは少し異なりObject.getPrototypeOf
ますが、かなり互換性があることを理解しています。
また、原則として、他の 2 つが存在しない多くの状況では、外部アクセス可能で十分であることも理解していますobject.constructor.prototype
(プロトタイプが再割り当てされていない場合)。
私が問題を抱えているのは、次の例です。
または
上記のような、いわば「チェーンをたどる」例で、シムがフォールバックするobject.constructor.prototype
と、無限ループという恐ろしい状況に陥ります。
私の質問: および が存在しない環境で上記のコードを実現する方法はありますObject.getPrototypeOf
か__proto__
?
無いような気がしますが、まだ知らない情報があれば調べてみたいと思います。
javascript - Object.defineProperty ポリフィル
私は現在、ES5 の新機能に基づいた JavaScript API を作成しています。それはObject.defineProperty
かなり広範囲に使用されます。Object.createGetSetProperty
これをとという 2 つの新しい関数にラップしました。Object.createValueProperty
ただし、これを古いブラウザー (恐ろしい IE8 など) で実行すると問題が発生します。
次のコードを検討してください。
ご覧のとおり、Object.createValueProperty の下に適切なフォールバックがありますが、Object.createGetSetProperty で適切にフォールバックする方法がわかりません。
これに対する解決策、シム、ポリフィルを知っている人はいますか?
javascript - Breeze - IE8 のメタデータ ヘルパー
IE8 で Breeze を使用して Breeze.metadata-helper.js を使用すると問題が発生します。es5-shim および sham ライブラリは既に含めています。失敗します: makePropDescription(proto, property) メソッドを実行しようとしているときに: Object.defineProperty(proto, propName, descr) で「getters & setters can't be defined on this javascript engine」というメッセージが表示されます。
追加に失敗するプロパティは、次で定義されている DeclarationID です。
Breeze v1.4.11 と Metadata-Helper v1.0.5 を使用しています。
es5-shim - いつシムが必要で、いつシャムが必要ですか?
EC5 Shimライブラリに 2 つのファイルがあるのはなぜですか? それぞれがいつ必要になりますか?
javascript - Android2.2以降のWebViewでES5のArrayメソッドは使えますか?
読んでいた:
http://kangax.github.io/es5-compat-table/#Array.prototype.map
しかし、 http: //caniuse.com にあるような webview バージョンの互換性が見つかりません。