객체 지향 프로그래밍에서 많은 언어는 기능 과부하를 지원하며 기능이 전달하는 다른 숫자와 유형의 매개 변수에 따라 다른 작업을 수행 할 수 있습니다. 그러나 JS는이를 지원하지 않으므로 약간의 작은 조치를 취해야합니다.
JS 함수 실행 컨텍스트에는 인수라는 흥미로운 변수가 있습니다. 함수 정의가 너무 많은 공식 매개 변수를 정의하지 않더라도 함수 실행 중에 전달되는 모든 매개 변수를 배열 형태로 저장합니다. 또 다른 특별한 특징은 배열 유형과 비교하여 인수 변수에 길이 속성이 하나만 있다는 것입니다. 푸시, 팝 등과 같은 어레이 방법에는 없습니다. 단지 "pseudo-array"일뿐입니다. 길이 속성이 있으며, 저장된 배열은 배열 액세스 문자 []에 의해 액세스 할 수 있으며 읽기 전용이며 작성할 수 없습니다.
1. 다른 숫자의 과부하
여기서 인수 함수의 길이 속성을 판단 할 수 있다는 것은 매우 분명해야합니다.
코드 사본은 다음과 같습니다.
<script type = "text/javaScript">
기능 토크 (MSG, 핸들러) {
var len = arguments.length;
// 매개 변수를 전달할 때 실행됩니다
if (len == 1) {
Alert ( "기능 :"+msg);
}
// 두 매개 변수가 전달되면 실행됩니다
else if (len == 2) {
핸들러 (MSG);
}
}
대화 ( "데모");
talk ( "데모", function (w) {alert ( "handler say :"+w);});
</스크립트>
2. 다른 유형의 매개 변수의 과부하
JS와 같은 동적으로 입력 한 언어의 경우 변수 선언의 임의의 특성은 개발자의 마음에 엄격한 변수 유형의 중요성을 과소 평가합니다 (PS : 의무 유형의 변수 선언을 소개함에 따라 ECMA 시스템을 기반으로합니다). 많은 예상치 못한 버그는 실제로이 가변 유형의 자동 변환으로 인해 발생합니다. 실제로 JS는 변수의 유형을 엄격하게 감지하는 매우 정확한 방법을 제공합니다. 더 일반적인 것은 유형의 방법과 생성자 속성입니다.
1. 변수 유형은 변수 유형을 반환합니다
코드 사본은 다음과 같습니다.
온도 = "say"; //끈
온도 = 1; //숫자
온도 = 정의되지 않은; //한정되지 않은
온도 = null; //물체
온도 = {}; //물체
온도 = []; //물체
온도 = 참; // 부울
temp = function () {} // 함수
경고 (Typeof Temp);
위의 테스트를 통해 NULL, OBJECT 및 ARRAY의 경우 모든 반환 객체 유형 및 다음 방법을 사용하면이 문제를 해결할 수 있습니다.
2. 구성체 속성은 변수 유형을 감지합니다
JS의 각 객체에는 생성자 속성이 있으며이 객체를 구성하는 함수를 참조하는 데 사용됩니다. 이 참조를 판단함으로써 가변 유형을 감지 할 수 있습니다.
코드 사본은 다음과 같습니다.
온도 = "say";
temp.constructor == 문자열; //진실
온도 = {};
temp.constructor == 객체; // true
온도 = [];
temp.constructor == 배열; // true
위의 테스트를 통해 배열과 객체 유형 변수를 쉽게 구별 할 수 있습니다. 사용자 정의 객체를 테스트하여 어떤 일이 발생하는지 확인합시다.
코드 사본은 다음과 같습니다.
// 사용자 정의 객체
함수 ball () {}
// 객체를 인스턴스화합니다
var basketball = new ball ();
Basketball.constructor == Ball; //진실
이것은 생성자 속성이 사용자 정의 객체에도 적용 가능하다는 것을 나타낼 수 있습니다.
위의 두 가지 방법의 적용을 이해 한 후 JS 기능 과부하의 시뮬레이션으로 돌아갑니다. 다음 예제는 매개 변수 유형에 따라 과부하입니다.
코드 사본은 다음과 같습니다.
기능 토크 (MSG) {
var t = msg 타입;
if (t == "string") {
Alert ( "문자열입니다");
}
else if (t == "숫자") {
경고 ( "숫자입니다");
}
}
대화 (10); // 문자열입니다
대화 ( "데모"); // 숫자입니다
첨부 된 것은 매개 변수 유형과 숫자를 엄격히 감지하는 매우 영리한 기능입니다.
코드 사본은 다음과 같습니다.
// 매개 변수 목록을 기반으로 변수 목록의 유형을 엄격히 확인하십시오.
기능 엄격한 (유형, args) {
// 매개 변수의 커널 번호와 입력이 일치하는지 확인
if (types.length! = args.length) {
// 길이가 일치하지 않으면 예외가 발생합니다.
"잘못된 수의 인수 수. 예상" + type.length + "," + args.length + "를 대신 받았다.";
}
// 각 매개 변수를 통해 이동하여 기본 유형을 확인하십시오
for (var i = 0; i <args.length; i ++) {
// 특정 유형의 JavaScript가 일치하지 않으면 예외가 발생합니다.
if (args [i] .constructor! = type [i]) {
"유효하지 않은 인수 유형. 예상" + 유형 [i] .name + "," + args [i] .constructor.name + "대신";
}
}
}
// 위의 방법을 사용합니다
함수 dofunction (id, name) {
// 매개 변수의 숫자와 유형을 감지합니다
엄격한 ([번호, 문자열], 인수);
..
}