JavaScriptオブジェクトのプロトタイプを変更すべきでない理由

JavaScriptオブジェクトのプロトタイプを変更すべきでない理由と、代わりに何をすべきかを確認してください

プログラマーとして、私たちが最初に学ばなければならないスキルの1つは、解決策を探す方法です。

Googleはあなたの友達です。そして、ほとんどの場合、2009年からのStackOverflowの回答は、2019年以降の問題に対する完璧な解決策です。

その特定のサイトや個人のブログで、組み込みのオブジェクトのプロトタイプを変更するコードを時々目にします。

この例のように、配列オブジェクトのプロトタイプは、insert方法:

Array.prototype.insert = function(index, item) {
  this.splice(index, 0, item)
}

このようにして、任意の配列を作成し、その上でinsert()を呼び出すことができます。

['red', 'blue'].insert(0, 'yellow')

便利です。このような関数を定義してその範囲を気にする代わりに、関数をArrayオブジェクトにアタッチして、すべての配列で使用できるようにします。

しかし、あなたができる、それはあなたを意味するものではありませんすべき

このアプローチの何が問題になっていますか?

考えられる競合

使用するライブラリがそのようなことを実装していると仮定します。そして、インポートする別のライブラリも同じことをします。おそらく、メソッドの動作は少し異なり、動作しないまでは正常に動作しているように見えます。

これらのライブラリを変更することはできませんが、それでも使用したいので、ここで大きな問題が発生します。

コードの将来性

JavaScriptの次のバージョンが実装していると仮定しますArray.insert方法。別の署名付き。さて、どうなりますか?戻って、書いたすべてのコードを書き直す必要があります。おそらく、あなたはもう働いていないクライアントのために。

あるいは、他の人が自分のプロジェクトで使用しているライブラリでこれを行ったのかもしれません。それはさらに悪いでしょう。

このアプローチは技術的負債を生み出すだけであり、ほとんど問題を引き起こします。

代わりに何をすべきですか?

ライブラリファイルに関数を作成し、使用するときにインポートします。制御できないオブジェクトは変更しないでください。

私の無料ダウンロードJavaScriptビギナーズハンドブック


その他のjsチュートリアル: