0

私は配列を持っています、そしてそれは私がそれを投げたメソッドを持っていaddます、それは私がラッパーとして使用しますpushpushを使用する必要があるときに何度か使用していることに気づきました。今では、メソッドへの参照を配列のネイティブaddに割り当てるとよいと思います。したがって、配列を呼び出すと、が呼び出されます。addpushpushadd

内部は、次のような外部で利用可能なネイティブメソッドに依存していますpushか?これは互換性にどのように影響しますか?これは悪い考えですか?もしそうなら、なぜですか?

いくつかのコード

PR.state = {
   views: []
};

_.extend(PR.state.views, {

   add: function(view) {
     var parent = view.parent;
     if ((!this.length && view instanceof PR.Views.App) || (parent && _.contains(this, parent)))
       this.push(view);
   }

});

// I am thinking:
PR.state.views.push = PR.state.views.add;
4

2 に答える 2

2

標準の配列メソッドの動作を変更しないことを強くお勧めします。カスタムメソッドが本当に必要な場合は、新しいメソッドを作成し、それに固有の名前を付けて使用します。

既存のメソッドの動作を変更すると、あらゆる種類の悪い結果が生じる可能性があります。

  1. 他のソースから取得したコードとの非互換性。
  2. 他の誰かがこのプロジェクトに取り組んだ場合、非標準で予期しない実装を作成します。これは、時限爆弾を追加して将来の開発者をつまずかせるようなものです。
  3. 代わりに独自のカスタムメソッドを使用するように自分自身をトレーニングする.push()ことは、まともな開発者が行うことです。早くやれよ。
  4. 適切でわかりやすい名前で新しい名前のメソッドを作成すると、コードの可読性、理解性、保守性が向上します。既存のメソッドを別の方法で機能するものに置き換えると、逆になります。

配列のプロトタイプ全体ではなく、配列の1つのインスタンスでメソッドを置き換えるだけでもそれほど悪くはありませんが、それでも良い考えではありません。

于 2013-03-14T04:12:07.550 に答える
0

なんてばかげた質問でしょう。に置き換えるpushと、からadd電話をかけるとどうなりますか?:<:<私はそれをテストしていませんが、明示的に使用しない限り、まだ利用可能であると思いますが、呼び出すとモンドエンドレスループが発生します。pushaddArray.prototype.pushArray.prototype.pushadd

于 2013-03-14T04:55:44.253 に答える