コードはまだシンプルです。したがって、まだ説明することは何もありません。 。
/**KOverLoad
オーバーロードされた関数を作成するためのヘルパー メソッド。
最後の関数を補足します。
@著者 ake 2010-07-03
@weblog http://www.cnblogs.com/akecn
*/
var KOverLoad = function(scope) {
this.scope =scope window || デフォルトでこのオブジェクトにメソッドを追加します。同時に追加したメソッドのthisはオブジェクトを指しています。
this.list = {}; //オーバーロードされた関数を保存する場所。
return this;
};
KOverLoad.prototype = {
//オーバーロードされたメソッドを追加します。
//@param arg オーバーロードされたメソッド。
add:function(arg, tables) {
if(typeof arg == "関数") {
var types = (types || []).join(",");
this.list[arg.length tables] = arg; //パラメータの数と型によって識別されるストレージのオーバーロードされたメソッド。明らかに、オーバーロードされたメソッド内のパラメータの数が
return this
}
} の場合、
checkTypes: function(types) {
var type = []; .log(typeof type); [] メソッドで作成された配列の type は object
//型を決定する必要がある場合は、Object.prototype.toString.call(type) == "[object Array]" を使用します。それ。
for(var i=0, it; it = type[i ];) {
type.push(typeof it);
}
return type.join(","); 🎜>},
//すべてのオーバーロードされた関数を追加した後、このメソッドを呼び出してオーバーロードされた関数を作成します。
//@param fc オーバーロードされた関数のメソッド名。
load:function(fc) {
var self = this, args, len, tables;
this.scope[fc] = function() { //指定されたスコープ内の指定されたメソッドをリセットするように設定しますロード機能。
args = Array.prototype.slice.call(arguments); //パラメータを配列に変換します。
len = args.length;
types = self.checkTypes(args);
//console.log(self.list);
if(self.list[len タイプ]) { / /パラメータの数に基づいて、対応するオーバーロードされたメソッドを呼び出します。
self.list[len Types].apply(self.scope, args); //ここでスコープとパラメータを指定します。
}else if(self.list[len]){
self.list[len].apply(self.scope, args)
}else {
throw new Error("未定義のオーバーロード型");
}
}
}
};
例を次に示します:
var s = {};
new KOverLoad(s) //メソッド バインディングの場所を設定します。名前空間?
.add(function(a) {
console.log("one",a,this)
},["string"])
.add(function(a,b) {
console.log("two",a,b,this)
},["string","string"])
.add(function(a,b,c) {
console.log("three",a,b,c,this)
},["string", "number", "string"])
.add(function(a,b,c,d) ) {
console.log("four",a,b,c,d,this)
})
.load("func") // ここのパラメータは作成されるリロードです。ロードされた関数のメソッド名。
s.func("a","b");