5

最近、ECMAScript 5でのプロパティの定義が変更されたため、ネイティブJavaScriptプロトタイプを安全に拡張できるかどうかという問題を再検討しました。実のところ、私はずっとArrayやFunctionのようなプロトタイプを拡張してきましたが、明らかな理由から、Objectではそうすることを避けました。Jasmineを使用した単体テストでは、Object.prototypeの仕様を自分の個人的なフレームワークの仕様に追加し、列挙できない関数でObject.prototypeを拡張します。安全であるように見えました。ただし、「タイプ」プロパティのようなデータプロパティと、異常な処理を行うゲッター/セッターは、意図しない結果をもたらしました。他のライブラリと競合する可能性はまだありますが、私の仕事では、それはほとんど発生しません。それでも、関数が列挙できない限り、Object.prototypeを拡張しても安全であるように見えます。

どう思いますか?Object.prototypeを今すぐ拡張しても安全ですか?話し合ってください。

4

2 に答える 2

1

JavaScript にネイティブなオブジェクトを拡張することは、多くの衝突の懸念がまだ残っているため、少し安全になるかもしれません。一般に、最近の標準から標準化された動作をサポートするためにオブジェクトを拡張する場合を除き、ラッパーを導入する方がはるかに安全です。制御できるのは自分だけである場合は、正しい方法で物事を行う方がはるかに簡単です。

環境固有のオブジェクト(DOM 要素とノード、AJAX など) について言えば、新しい JS 標準はまだ提供しておらず、間違いなく、インターフェース標準で定義されているものを除いて、それらとの相互作用について保証することはできません。それらは多くの異なるスクリプト エンジンからアクセスできる可能性があるため、特定の 1 つの言語 (JS) の癖に合わせて調整する必要がないことを決して忘れないでください。したがって、これらのいずれかを拡張しないという推奨事項も引き続き有効です。

于 2012-08-02T21:18:07.097 に答える
0

決定的な絶対的な答えは...

"場合によります。" :)

組み込みのJavaScriptオブジェクトを拡張することは、完全に安全である場合もあれば、完全な災害になる場合もあります。それはあなたが何をしているのか、そしてあなたがそれをどのようにやっているのかによります。

スマートプラクティスと常識を使用して、それをテストします。

于 2012-08-02T17:01:28.903 に答える