ホームページ  >  記事  >  ウェブフロントエンド  >  キャッシュ呼び出しチェーンを使用して JS メソッドのオーバーロードを実装する手順の詳細な説明

キャッシュ呼び出しチェーンを使用して JS メソッドのオーバーロードを実装する手順の詳細な説明

php中世界最好的语言
php中世界最好的语言オリジナル
2018-06-01 14:18:291100ブラウズ

今回はキャッシュコールチェーンを使用してJSメソッドのオーバーロードを実装する手順と、キャッシュコールチェーンを使用してJSメソッドのオーバーロードを実装する際の注意事項について詳しく説明します。ケース、見てみましょう。

1. メソッドのオーバーロードとは

メソッドのオーバーロードとは、クラス内に同じ名前の複数のメソッドを定義することを指しますが、各メソッドには異なるパラメーターの型または数が必要です。

要するに: メソッドのオーバーロードとは、メソッド名と異なる読み込みパラメーターが繰り返されることを意味します。

詳細については左折してください: メソッド オーバーロード/Baidu 百科事典

それでは、js はどのようにこれを実装するのでしょうか? ? ?

2.jsを実装するには?

まず、

javascriptには関数/メソッドをオーバーロードする概念がありませんが、jsには引数と呼ばれるメソッドパラメータの長さをこのパラメータのlength属性を通じて取得できます。さて、今日実装します。パラメータの型ではなく、パラメータの長さに応じてのみオーバーロードされます~~・長さ、ダウンロードに関しては、メソッドのパラメータの長さが利用可能になると、より一般的なスイッチ書き込みメソッドが表示されます:

var seven={
  dosomething:function(){
    switch(arguments.length){
      case 0:
        console.log(arguments.length);
        //dosomething
        break;
      case 1:
        console.log(arguments.length);
        //dosomething
        break;
       case 2:
        //dosomething
        console.log(arguments.length);
        break;
    }
  }
}

3. 最適化

すごいですね〜メソッドが10個あると10個の分岐が必要になります〜そしてそれぞれのメソッド本体がケースに入っているか、別々に提案されて関数として書かれているため〜

それではこれらは悪いです~維持するのが難しいです、十分に高くありません~では、異なるパラメータを持つ同じメソッド名をどのようにエレガントに処理すればよいでしょうか?

ここで apply メソッドが使用されます。

7 つの addMethod メソッドを書きましょう

var seven = {
  addMethod: function (fname, func) {
    var old = this[fname];
    this[fname] = function () {
      if (arguments.length == func.length) {
        return func.apply(this,arguments);
      }
      if (typeof old == 'function') {
        return old.apply(this, arguments);
      }
    }
  }
};
addMethod方法
seven.addMethod('dosomething', function (x) {
  console.log(arguments.length);
   //dosomething
});
seven.addMethod('dosomething', function (x,y) {
  console.log(arguments.length);
   //dosomething
});
seven.addMethod('dosomething', function (x,y,z) {
  console.log(arguments.length);
   //dosomething
});

修改后的seven如上,然后之前写的switch就可以这样搞了:

rrreee

咱们要增加方法,只需要调用这个addMethod方法就ok了,是不是觉得简单明了,更加清晰。
那么这段代码的原理呢,其实也很简单,就是缓存旧方法,然后根据参数长度依次apply链式调用,直到找到和当前参数等长的方法~然后进行调用。

funcold 変更された 7 は上記の通りで、前に書いたスイッチは次のように実行できます:

rrreee

メソッドを追加したい場合は、addMethod メソッドを呼び出すだけでよいと思いませんか?

つまり、このコードの原理は実際には非常に単純で、古いメソッドをキャッシュし、現在のパラメータと同じ長さのメソッドが見つかるまで、パラメータの長さに応じて連鎖呼び出しを適用してから呼び出すというものです。

funcold は、初めて使用する人を混乱させる可能性がありますが、実際には、JavaScript 言語の機能が巧みに使用されています。 . この古いメソッドは毎回保存され、古いメソッドはその参照を保持します。閉店〜。

この記事の事例を読んだ後は、その方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。
推奨読書:

Vue プロジェクトで Vux を使用する方法

🎜🎜 Vue でスロットを使用して親コンポーネントを配布する方法🎜🎜🎜

以上がキャッシュ呼び出しチェーンを使用して JS メソッドのオーバーロードを実装する手順の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。