今回はキャッシュコールチェーンを使用してJSメソッドのオーバーロードを実装する手順と、キャッシュコールチェーンを使用してJSメソッドのオーバーロードを実装する際の注意事項について詳しく説明します。ケース、見てみましょう。
1. メソッドのオーバーロードとはメソッドのオーバーロードとは、クラス内に同じ名前の複数のメソッドを定義することを指しますが、各メソッドには異なるパラメーターの型または数が必要です。要するに: メソッドのオーバーロードとは、メソッド名と異なる読み込みパラメーターが繰り返されることを意味します。
それでは、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; } } }
それではこれらは悪いです~維持するのが難しいです、十分に高くありません~では、異なるパラメータを持つ同じメソッド名をどのようにエレガントに処理すればよいでしょうか?
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链式调用,直到找到和当前参数等长的方法~然后进行调用。
func
和 old
変更された 7 は上記の通りで、前に書いたスイッチは次のように実行できます:
メソッドを追加したい場合は、addMethod メソッドを呼び出すだけでよいと思いませんか?
つまり、このコードの原理は実際には非常に単純で、古いメソッドをキャッシュし、現在のパラメータと同じ長さのメソッドが見つかるまで、パラメータの長さに応じて連鎖呼び出しを適用してから呼び出すというものです。func
と old
は、初めて使用する人を混乱させる可能性がありますが、実際には、JavaScript 言語の機能が巧みに使用されています。 . この古いメソッドは毎回保存され、古いメソッドはその参照を保持します。閉店〜。 この記事の事例を読んだ後は、その方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。
推奨読書:
以上がキャッシュ呼び出しチェーンを使用して JS メソッドのオーバーロードを実装する手順の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。