ここでは、JavaScriptオブジェクトのプロトタイプを修正する方法について悩んでいます。私は個人的にそれがどのように問題であるかを見ていません。例えば、Arrayオブジェクトを拡張してmapメソッドとincludeメソッドを持たせたり、より堅牢なDateメソッドを作成したりするには?JavaScriptオブジェクトのプロトタイプを変更するのはどうですか?
答えて
問題は、プロトタイプがいくつかの場所で変更できることです。例えば、あるライブラリは、Arrayメソッドのプロトタイプにmapメソッドを追加し、あなた自身のコードは同じものを追加しますが、別の目的で追加します。したがって、1つの実装が壊れてしまいます。
bjorndが指摘したように、monkey-patchingは、複数のライブラリが関わっている場合にのみ問題があります。したがって、再利用可能なライブラリを作成している場合は、それを行うのは良い方法ではありません。しかし、javascriptでホストオブジェクトを使用するときにブラウザ間の互換性の問題を解消するための最善の手法はまだ残っています。
prototype.jsとjson2.jsを一緒に使用した場合の実際の事故については、this linkを参照してください。
ほとんどの場合、名前空間の衝突が原因です。 Prototypeフレームワークはネイティブに含まれているものとは異なる名前を保持することに多くの問題を抱えていたことは知っています。
オブジェクトのプロトタイプに関数を追加する二つの主要な人々にユーティリティを提供する方法..
プロトタイピング
があります。 MooToolsとPrototypeはこれを行います。
利点:
- スーパー簡単にアクセスできます。
短所:
- は、システムメモリを大量に使用することができます。最新のブラウザはコンストラクタからプロパティのインスタンスをフェッチするだけですが、一部の古いブラウザでは、コンストラクタの各インスタンスごとにそれぞれのプロパティのインスタンスが個別に格納されます。
- 常に利用可能なわけではありません。私は「利用できない」の意味は何
はこれです:
あなたはdocument.getElementsByTagName
からのNodeListを持っており、あなたがそれらを反復処理したい想像してみてください。あなたはできません..
..それはノードリストであり、配列ではありません。上記はあなたのようなエラーを与えるでしょう:Uncaught TypeError: [object NodeList] doesn't have method 'map'
。
NodeListや他のArray型の オブジェクトを実際の配列に変換する方法は非常に簡単です。
それにユーティリティを重ねブランドの新しいグローバル変数と在庫を作成
を収集します。 jQueryとDojoはこれを行います。
利点:常に存在
- 。
- メモリ使用量が少ない。
短所:
- ほどうまく配置されていません。
- 時には使いにくいと感じることがあります。それでも..あなたが行うことができ..but
document.getElementsByTagName('p').map(function() { ... });
を行うことができませんでした。この方法では
..
通常では、マットで指摘したように..butjQuery.map(document.getElementsByTagName('p'), function() { ... });
あなたは上記で行うでしょう。
jQuery('p').map(function() { ... });
どちらが良いですか?
最終的には、あなた次第です。上書きされる危険性はありますが、上書きすることをお勧めします。それは私が好むスタイルなので、リスクが結果に値すると感じています。あなたが私としてそれについて確信していないなら、収集も良いスタイルです。彼らには長所と短所がありますが、すべてがすべて同じ結果を生み出します。
Nicholas C. Zakasの優れた記事には、なぜこの練習がチームや顧客プロジェクト中にプログラマーの心の中にあるべきものではないのかが説明されています(教育目的のためにいくつかの調整ができます一般的なプロジェクトの使用)。
保守性のJavaScript:あなたが所有していないオブジェクトを変更しないでください:http://stackoverflow.com: https://www.nczonline.net/blog/2010/03/02/maintainable-javascript-dont-modify-objects-you-down-own/
- 1. JavaScript:オブジェクトの変数のプロトタイプを変更しますか?
- 2. JavaScriptオブジェクトのプロトタイプを動的に変更する
- 3. javascriptでプロトタイプを変更する際のスーパー機能
- 4. JavaScriptでオブジェクトのプロトタイプのプロパティを反復処理するにはどうすればよいですか?
- 5. 2つのオブジェクトのJavascriptプロトタイプ
- 6. JavaScriptオブジェクトにプロトタイプを追加するリテラル
- 7. ソフトウェアUIのプロトタイプはどうですか?
- 8. javacriptプロトタイプの関数を変更する
- 9. どのようにjavascript "フォントサイズを変更する"を変更するには?
- 10. プロトタイプをコピーするには新しいオブジェクトが必要ですか? JavaScriptの
- 11. プロトタイプ(JavaScript)でのイベントのパフォーマンスはどれくらいですか?
- 12. 賢いJavaScriptは「コンストラクタ」プロパティは、オブジェクトのプロトタイプを返すJavaScriptでは評価方法
- 13. JavaScriptのプロトタイプとは何ですか?
- 14. JavaScriptでオブジェクトのプロトタイプにイベントハンドラを追加する方法
- 15. プロトタイプの継承を使用するjavascriptコードのオブジェクトの有効期間はどのくらいですか?
- 16. JavaScriptのプロトタイプは
- 17. javascriptプロトタイプの継承とオブジェクトのプロパティ
- 18. Javascript - オブジェクトはクラスのプロトタイプの関数をどのように知っていますか?
- 19. プロトタイプを変更すると悪影響はありますか?
- 20. Stringのプロトタイプを変更する必要がありますか?
- 21. javascriptによるウェブページストアの変更はどうすればできますか?
- 22. JavaScriptコードを変更するにはどうすればよいですか?
- 23. JavaScriptプロトタイプ継承(プロトタイプのチェーン)
- 24. javascriptのプロトタイプ継承はどのように機能しますか?
- 25. インタプリタでオブジェクトがどのように表示されるかを変更する
- 26. プロトタイプ作成のためにオブジェクトのアドレス指定を行うにはどうすればよいですか?
- 27. Javascript:ページを更新せずにアドレスバーのURLを変更するにはどうすればよいですか?
- 28. javascriptでは、オブジェクトまたはオブジェクトのプロトタイプに関数を追加する必要があります
- 29. どのようにjavascriptでadsense広告の場所を変更するには?
- 30. プロトタイプで「左」キーと「右」キーをどう扱うのですか?
同様の名前空間の衝突も(jQueryの自体に猿パッチある)のjQueryプラグインで発生/ q/5740974/479863 –
これに関して、私は複数のライブラリを使い、コード内で何が起こっているのかわからないと、開発者の責任だと感じていますが、それは私の質問に答えるものです。 – colourandcode
開発者は、JQueryやDoJoのような大規模なライブラリの内部構造と実装を知ることができますか?彼らがフレームワークの次のリリースの前に実装されたものを手に入れるかどうかは疑いがあります。ライブラリとフレームワークの全体のポイントは、それらを使用する方法だけを知る必要があることです。 –