루비, 커피 스크립트 및 다가오는 JavaScript 버전과 같은 일부 언어는 다음과 같은 기능을 정의 할 때 기본 매개 변수를 선언 할 수 있습니다.
코드 사본은 다음과 같습니다.
함수 myfunc (param1, param2 = "Second String") {
Console.log (param1, param2);
}
// 출력 : "첫 번째 문자열"및 "두 번째 문자열"
myfunc ( "첫 번째 문자열");
// 출력 : "첫 번째 문자열"및 "두 번째 문자열 버전 2"
myfunc ( "첫 번째 문자열", "두 번째 문자열 버전 2");
불행히도, 현재 JavaScript 버전 에서이 글은 유효하지 않습니다. 그렇다면 기존 도구 세트를 사용하여 이러한 방식으로 구현하기 위해 무엇을 할 수 있습니까?
가장 쉬운 솔루션은 다음과 같습니다.
코드 사본은 다음과 같습니다.
함수 myfunc (param1, param2) {
if (param2 === 정의되지 않은) {
param2 = "두 번째 문자열";
}
Console.log (param1, param2);
}
// 출력 : "첫 번째 문자열"및 "두 번째 문자열 버전 2"
myfunc ( "첫 번째 문자열", "두 번째 문자열 버전 2");
사실 생략 된 매개 변수는 액세스 할 때 항상 "정의되지 않은"것입니다. 매개 변수가 하나만 있으면 좋은 솔루션이므로 그 당시 여러 가지가있는 솔루션이 있으면 어떻게됩니까?
매개 변수가 둘 이상인 경우 객체를 매개 변수로 사용할 수 있습니다. 매개 변수에는 명확한 이름이있는 이점이 있습니다. 객체 매개 변수를 전달하면 기본값을 동일한 방식으로 선언 할 수 있습니다.
코드 사본은 다음과 같습니다.
함수 myfunc (paramobject) {
var defaultparams = {
param1 : "첫 번째 문자열",
param2 : "두 번째 문자열",
param3 : "세 번째 문자열"
};
var finalParams = DefaultParams;
// 우리는 paramobject의 각 속성을 반복합니다
for (paramobject의 var 키) {
// 현재 속성이 상속되지 않은 경우 진행되었습니다
if (paramoBject.hasownProperty (key)) {
// 현재 속성이 정의 된 경우
// FinalParams에 추가합니다
if (paramoBject [key]! == undefined) {
FinalParams [key] = paramobject [key];
}
}
}
Console.log (FinalParams.param1,
FinalParams.param2,
FinalParams.param3);
}
myfunc ({param1 : "내 자신의 문자열"});
이것은 약간 서투른 것입니다. 이 방법을 많이 사용하면 캡슐화 기능을 작성할 수 있습니다. 다행히도 많은 라이브러리에는 이제 jQuery 및 밑줄의 확장 메소드와 같은 관련 방법이 있습니다.
다음은 위의 동일한 결과를 달성하기 위해 밑줄 확장 방법을 사용합니다.
코드 사본은 다음과 같습니다.
함수 myfunc (paramobject) {
var defaultparams = {
param1 : "첫 번째 문자열",
param2 : "두 번째 문자열",
param3 : "세 번째 문자열"
};
var finalparams = _.extend (defaultparams, paramobject);
Console.log (FinalParams.param1,
FinalParams.param2,
FinalParams.param3);
}
// 출력 :
// "내 자신의 문자열"과 "두 번째 문자열"및 "세 번째 문자열"
myfunc ({param1 : "내 자신의 문자열"});
이것이 현재 JavaScript 버전에서 기본 매개 변수를 얻을 수있는 방법입니다.
이 기사에서 부적절한 측면에 대한 비판과 교정을 환영합니다.