> 웹 프론트엔드 > JS 튜토리얼 > JavaScript 오버로드된 함수에 대한 도우미 메서드 추가 2_javascript 팁

JavaScript 오버로드된 함수에 대한 도우미 메서드 추가 2_javascript 팁

WBOY
풀어 주다: 2016-05-16 18:23:55
원래의
1014명이 탐색했습니다.

코드는 여전히 간단합니다. 그러니 아직 설명할 것이 없습니다. .

코드 복사 코드는 다음과 같습니다.

/**KOverLoad
오버로드된 함수를 생성하기 위한 도우미 메서드입니다.
마지막 기능을 보완합니다.
@작성자 ake 2010-07-03
@weblog http://www.cnblogs.com/akecn
*/
var KOverLoad = function(scope) {
this.scope =scope || //기본적으로 이 개체에 메서드를 추가합니다. 동시에 추가된 메소드의 this는 객체를 가리킨다.
this.list = {}; //오버로드된 함수를 저장하는 장소입니다.
return this;
};
KOverLoad.prototype = {
//오버로드된 메서드를 추가합니다.
//@param arg 메소드가 오버로드되었습니다.
add:function(arg,types) {
if(typeof arg == "function") {
var type = (types || []).join(","); this.list[arg.length type] = arg; //매개변수의 수와 유형으로 식별되는 스토리지 오버로드 메서드. 분명히 오버로드된 메서드의 매개변수 수가
return this;
}
}인 경우
checkTypes: function(types) {
var type = []//console; .log(typeof type); [] 메소드로 생성된 typeof 배열은 object
//type을 결정해야 하는 경우 Object.prototype.toString.call(type) == "[object Array]"를 사용하세요. 그것.
for(var i=0, it; it = 유형[i ];) {
type.push(typeof it)
}
return type.join(","); 🎜>},
//오버로드된 함수를 모두 추가한 후 이 메소드를 호출하여 오버로드된 함수를 생성합니다.
//@param fc 오버로드된 함수의 메서드 이름입니다.
load:function(fc) {
var self = this, args, len, type;
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 type].apply(self.scope, args); //여기서 범위와 매개변수를 지정합니다.
}else if(self.list[len]){
self.list[len].apply(self.scope, args)
}else {
throw new Error("정의되지 않은 오버로드 유형 ");
}
}
}
};


예:


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("세",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")

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿