>  기사  >  웹 프론트엔드  >  인수를 사용하여 javascript에서 string.format 함수 구현

인수를 사용하여 javascript에서 string.format 함수 구현

高洛峰
高洛峰원래의
2016-12-14 10:03:051071검색

다음은 소스코드를 발췌한 내용과 그의 설계 및 구현 아이디어를 심층적으로 분석한 내용이다.

코드는 다음과 같다.

function format(string) { 
var args=arguments; 
var pattern=new RegExp("%([1-" + arguments.length + "])", "g"); 
return String(string).replace(pattern, function(match, index) { 
return args[index]; 
}); 
};

을 통해 형식 함수, 다음 코드:

코드는 다음과 같습니다.

format("And the %1 want to know whose %2 you %3", "papers", "shirt", "wear");

는 "그리고 신문에서는 당신이 누구 셔츠를 입었는지 알고 싶어합니다"를 반환합니다.
물론 C#에서 매개변수를 전달하고 string.format 함수를 호출하는 것과 약간 비슷합니다.
대체로 보면 기술적인 내용은 정말 없는 것 같습니다. 그런데 정말 기술적인 내용이 없는 걸까요? Lou Zhu는 자바스크립트와 인수에 대한 피상적인 지식과 이해를 바탕으로 이 프로그램을 분석합니다.
1. 정규 표현식
1에서 1까지 인수 수와 일치하는 %로 시작하는 새로운 프로그램을 매우 교묘하게 만듭니다. , 이 정규 패턴은 아래 2번 항목의 문자열 교체를 위한 중요한 전제 조건입니다.
2. 문자열 교체 함수
교체 함수의 두 번째 매개 변수는 매우 "놀라운" 기능입니다. 정의에 따르면 args 변수는 실제로 인수이고 index 매개변수는 args[index]를 통해 얻을 수 있으며 index>=1 및 index
기능이 너무 짧고 간결해서 강력한 기능과 큰 대조를 이루는 것이 놀랍습니다.
Lou Zhu처럼 C#에 푹 빠져 C#의 string.format 작성 방법에 푹 빠져 있는 개발자도 많을 것입니다(대부분은 사용 습관 때문에 발생하는 것이겠죠?). 소스 코드를 약간 변경했습니다.

코드는 다음과 같습니다.

function format(string) { 
var args=arguments; 
var pattern=new RegExp("{([0-" + arguments.length + "])}", "g"); 
return String(string).replace(pattern, function(match, index) { 
var currentIndex=parseInt(index); 
if (currentIndex + 1 > args.length || currentIndex < 0) { 
throw new Error("参数索引出错"); 
} 
return args[currentIndex + 1]; 
}); 
}; 
document.write(format("And the {0} want to know whose {1} you {2}", "papers", "shirt", "wear"));//大括号,索引从0开始...

이렇게 하면 형식 함수를 C# 작성 스타일처럼 호출할 수 있는 것처럼 보입니다.
이 기사를 마지막으로 확인한 것은 2008년이었습니다. Lou Zhu는 2008년에 꽤 깨달음을 얻었고 JavaScript를 배우기 위해 열심히 노력하고 있었습니다. 그러나 그는 인수에 대한 이해가 아직 매우 미성숙했습니다. 자신의 언어로 이벤트를 정의할 때 createFunction 함수를 정의하는 데 사용하고, createFunction 함수는 이벤트에서 사용할 매개변수 없는 함수를 구성하는 데 사용하는데, 그 당시 저는 항상 "그 모양만 알지만, 현실은 아니야." 앤드루의 걸작을 읽은 후 갑자기 깨달음을 느꼈습니다. 반응이 느리고 나중에 깨달았지만 여전히 큰 영감과 만족감을 느꼈습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.