[JQUERY] 방법은 자바 스크립트에 과부하
JQUERY방법은 자바 스크립트에 과부하
해결법
-
1.자바 스크립트는 방법 (Java 또는 비슷한 같이) 과부하, 세 번째 기능은 이전의 선언을 덮어 쓰기를 지원하지 않습니다.
자바 스크립트는 방법 (Java 또는 비슷한 같이) 과부하, 세 번째 기능은 이전의 선언을 덮어 쓰기를 지원하지 않습니다.
대신, 인수 객체를 통해 변수 인수를 지원합니다. 당신은 할 수
function somefunction(a, b) { if (arguments.length == 0) { // a, b are undefined // 1st body } else if (arguments.length == 1) { // b is undefined // 2nd body } else if (arguments.length == 2) { // both have values // 3rd body } // else throw new SyntaxError? }
또한 바로 확인 할 수 대해서 typeof == 등이 호출 된 SomeFuncion을 (미정)에서 arguments.length은 1이고, 이것은 다양한 매개 변수, 예를 들어,와 easer 호출을 허용 할 수 있도록 것 "미등록" 당신은 아마도 비어 변수가있을 때.
-
2.JS가 제공되지 않은 파라미터로 정의 전달한다. 당신이 오버로드 같은 것을 원하는 경우 아래 코드에 비슷한 일을 수행해야합니다 :
JS가 제공되지 않은 파라미터로 정의 전달한다. 당신이 오버로드 같은 것을 원하는 경우 아래 코드에 비슷한 일을 수행해야합니다 :
function someFunction(a, b) { if (typeof a === 'undefined') { // Do the 0-parameter logic } else if (typeof b === 'undefined') { // Do the 1-parameter logic } else { // Do the 2-parameter logic } }
-
3.당신은 각각의 새로운 선언 변수 된 SomeFuncion을 삭제하고 있습니다.
당신은 각각의 새로운 선언 변수 된 SomeFuncion을 삭제하고 있습니다.
이것은 동일합니다
window.somefunction = function(... window.somefunction = function(... window.somefunction = function(...
자바 스크립트 메소드 오버로딩을 제공하지 않습니다.
적절한 방법 중 하나입니다 :
-
4.당신은 자바 스크립트의 메소드를 오버로드 할 수 없습니다. 자바 스크립트 함수는 변수에 저장된다. 전역 변수는 window 객체에 저장됩니다. 당신은 같은 이름 (전용 키 해시)와 객체 당 하나 개의 속성을 가질 수 있습니다.
당신은 자바 스크립트의 메소드를 오버로드 할 수 없습니다. 자바 스크립트 함수는 변수에 저장된다. 전역 변수는 window 객체에 저장됩니다. 당신은 같은 이름 (전용 키 해시)와 객체 당 하나 개의 속성을 가질 수 있습니다.
당신이 할 수있는 것은, 대부분의 매개 변수를 사용하여 정의를 정의하고 전달 얼마나 많은 확인할 수 있습니다.
function Test(a, b, c) { if(typeof a == 'undefined') { a = 1; } if(typeof b == 'undefined') { b = "hi"; } if(typeof c == 'undefined') { c = Date.Now; } }
내가 테스트 ()를 호출하면 내가 Test라는 것처럼 지금, 그것은 행동 것 (1, "안녕하세요", Date.Now)
-
5.이 모든 유형의 매개 변수의 수를 통과 할 수 있기 때문에 자바 스크립트에 과부하 실제 기능은 없습니다. 가장 좋은 방법은 기능을하는 것입니다 처럼: 이 myfunc (옵트)
이 모든 유형의 매개 변수의 수를 통과 할 수 있기 때문에 자바 스크립트에 과부하 실제 기능은 없습니다. 가장 좋은 방법은 기능을하는 것입니다 처럼: 이 myfunc (옵트)
{ // with opt = {'arg1':'a1','arg2':2, etc}, then check your opt inside of the function }
-
6.나는 여기에 설명이 문제에 대한 우아한 해결책을 개발하기 위해 노력했다. 그리고 당신은 여기에서 데모를 찾을 수 있습니다. 사용법은 다음과 같습니다 :
나는 여기에 설명이 문제에 대한 우아한 해결책을 개발하기 위해 노력했다. 그리고 당신은 여기에서 데모를 찾을 수 있습니다. 사용법은 다음과 같습니다 :
var out = def({ 'int': function(a) { alert('Here is int '+a); }, 'float': function(a) { alert('Here is float '+a); }, 'string': function(a) { alert('Here is string '+a); }, 'int,string': function(a, b) { alert('Here is an int '+a+' and a string '+b); }, 'default': function(obj) { alert('Here is some other value '+ obj); } }); out('ten'); out(1); out(2, 'robot'); out(2.5); out(true);
이를 달성하기 위해 사용되는 방법 :
var def = function(functions, parent) { return function() { var types = []; var args = []; eachArg(arguments, function(i, elem) { args.push(elem); types.push(whatis(elem)); }); if(functions.hasOwnProperty(types.join())) { return functions[types.join()].apply(parent, args); } else { if (typeof functions === 'function') return functions.apply(parent, args); if (functions.hasOwnProperty('default')) return functions['default'].apply(parent, args); } }; }; var eachArg = function(args, fn) { var i = 0; while (args.hasOwnProperty(i)) { if(fn !== undefined) fn(i, args[i]); i++; } return i-1; }; var whatis = function(val) { if(val === undefined) return 'undefined'; if(val === null) return 'null'; var type = typeof val; if(type === 'object') { if(val.hasOwnProperty('length') && val.hasOwnProperty('push')) return 'array'; if(val.hasOwnProperty('getDate') && val.hasOwnProperty('toLocaleTimeString')) return 'date'; if(val.hasOwnProperty('toExponential')) type = 'number'; if(val.hasOwnProperty('substring') && val.hasOwnProperty('length')) return 'string'; } if(type === 'number') { if(val.toString().indexOf('.') > 0) return 'float'; else return 'int'; } return type; };
-
7.이는 예상 된 동작입니다.
이는 예상 된 동작입니다.
문제는 자바 스크립트가 기본적으로 메소드 오버로딩을 지원하지 않는다는 것입니다. 그것을보고한다면, / 동일한 이름을 가진 두 개 이상의 기능 그냥 마지막 정의 함수를 고려하고 이전의 것들을 덮어 쓸 수 있습니다 구문 분석합니다.
나는이 사건의 대부분은 다음입니다 적합하다고 생각하는 방식의 하나 -
당신이 방법을 말할 수 있습니다
function foo(x) { }
대신 자바 스크립트 수없는 방법을 오버로드의 새 방법을 정의 할 수 있습니다
fooNew(x,y,z) { }
다음과 같이 다음 1 기능을 수정 -
function foo(x) { if(arguments.length==2) { return fooNew(arguments[0], arguments[1]); } }
당신이 많은 그런 오버로드 방법이있는 경우와 똑같이-else 문보다 스위치를 사용하는 것이 좋습니다.
같은 표준 또는 자바 스크립트 메소드 오버로딩을 할 수있는 더 검증 된 방법은 없습니다. 하나는 무엇에 가장 적합한 자신의 프로그래밍 설계를해야한다. 나는 충분해야 정의되지 있지 않은지 유형을 확인하여 인수 길이에 대한 간단한 스위치를 말할 것입니다.
-
8.인수는 개념으로 오버로드하는 방법을 만드는 데 사용되는 객체.
인수는 개념으로 오버로드하는 방법을 만드는 데 사용되는 객체.
인수는 함수 실행 컨텍스트 내에서만 사용할 수 개체의 특별한 유형입니다.
에서 arguments.length 속성은 함수에 전달 된 매개 변수의 수를 식별하는 데 사용됩니다.
당신은 가짜 메소드 오버로딩을 만들 수있는 최고 수준의 기능의보다 효율적으로 사용하실 수 있습니다. 전체 개념은 내 자신의 웹 사이트에 설명 : 과부하 기능을 자바 스크립트에서
-
9.메소드 오버로딩 직접 자바 스크립트에서 지원되지 않습니다. 여기에 아래와 같이 당신이 좋아 매우 무언가를 달성 할 수있는 방법을 예입니다 :
메소드 오버로딩 직접 자바 스크립트에서 지원되지 않습니다. 여기에 아래와 같이 당신이 좋아 매우 무언가를 달성 할 수있는 방법을 예입니다 :
function overloadMethod(object, name, fn){ if(!object._overload){ object._overload = {}; } if(!object._overload[name]){ object._overload[name] = {}; } if(!object._overload[name][fn.length]){ object._overload[name][fn.length] = fn; } object[name] = function() { if(this._overload[name][arguments.length]) return this._overload[name][arguments.length].apply(this, arguments); }; } function Students(){ overloadMethod(this, "find", function(){ // Find a student by name }); overloadMethod(this, "find", function(first, last){ // Find a student by first and last name }); } var students = new Students(); students.find(); // Finds all students.find("Rahul"); // Finds students by name students.find("Rahul", "Mhatre"); // Finds users by first and last name
소스 : 소스
-
10.당신이 클래스를 사용하는 경우는 다른 매개 변수를 같은 방법으로이 두 개의 서로 다른 클래스를 만들 수 있습니다. 그럼 당신은 모방 오버로딩 행동 의존성 주입과 함께 확산 연산자를 사용할 수 있습니다.
당신이 클래스를 사용하는 경우는 다른 매개 변수를 같은 방법으로이 두 개의 서로 다른 클래스를 만들 수 있습니다. 그럼 당신은 모방 오버로딩 행동 의존성 주입과 함께 확산 연산자를 사용할 수 있습니다.
클래스 푸 { 방법(){ 을 console.log ( '방식 foo는에서 안녕하세요') } } 클래스 바 { 방법 (명) { CONSOLE.LOG이 (`방법 바에서 안녕하세요. 이름은 $입니다 {이름}`) } } 함수 MimicOverload OBJ (옵션) { obj.method (... 옵션) } CONST OBJ1 = 새로운 푸 () const를 obj2보다 = 새로운 바 () MimicOverload (OBJ1 []) MimicOverload (obj2보다 [ '오버로드'])
from https://stackoverflow.com/questions/12694588/method-overloading-in-javascript by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] PHP는 함수에 jQuery를 AJAX 요청을 만들기 (0) | 2020.10.24 |
---|---|
[JQUERY] JS와 트리거 CSS 호버 [중복] (0) | 2020.10.24 |
[JQUERY] GRIDVIEW jQuery를 DatePicker에서의 Asp.Net UpdatePanel (0) | 2020.10.24 |
[JQUERY] jQuery를 사용하여 사업부를 회전하는 방법 [마감] (0) | 2020.10.24 |
[JQUERY] 아약스 성공 콜백 함수 내부의 $ (이)에 액세스하는 방법 (0) | 2020.10.24 |