기술 기사를 처음 번역했을 때, 나는 당신을 비웃었습니다!
번역 된 원본 텍스트 :
JavaScript의 함수
첫 번째 단락은 생략됩니다.
각 JavaScript 함수에는 toString (), call () 및 apply ()를 포함한 많은 첨부 된 메소드가 있습니다. 함수가 고유 한 메소드를 가질 수 있다는 것이 이상하게 들리지만 JavaScript의 모든 함수는 객체라는 것을 기억하십시오. 이 기사를 살펴보고 (Refresher) JavaScript 기능을 검토하십시오. JavaScript의 함수와 메소드의 차이점을 알고 싶을 수도 있습니다. "기능"과 "방법"에 대한 설명은 JavaScript의 습관적인 관습 일 뿐이라고 생각합니다. 함수는 그 자체를 기반으로하며 (예 : Alert ()) 및 메소드는 함수 내부의 객체 (사전)의 속성이며 객체를 통해 메소드를 호출합니다. 각 JavaScript 객체에는 toString () 메소드가 있습니다. 다음은 코드의 예입니다. 함수 객체에서는 toString () 메소드를 사용할 수 있습니다.
함수 foo () {alert ( 'x');} alert (foo.toString ());함수는 객체이기 때문에 고유 한 속성과 방법이 있습니다. 우리는 그것들을 데이터로 생각할 수 있습니다. 이 기사에서는 두 가지 함수 적용 () 및 Call ()의 방법에만 중점을 둡니다.
다음 코드부터 시작하겠습니다.
var x = 10; function f () {alert (this.x);} f ();우리는 글로벌 함수 f ()를 정의합니다. F ()이 키워드를 통해 변수 X에 액세스하지만 객체 인스턴스를 통해이 기능을 호출 할 수 없다는 점에 유의해야합니다. 이 객체는 어떤 대상을 포인트합니까? 이것은이 글로벌 대상을 가리킬 것입니다. 우리의 변수 x는이 글로벌 객체에서 정의됩니다. 위의 코드는 정상적으로 실행될 수 있습니다. 실행 결과에 대화 상자가 표시되고 10 개가 대화 상자에 표시됩니다.
이를 통해 Call ()를 호출하고 apply () 할 수 있습니다. 다음 예제는 Call ()를 사용하는 방법을 보여줍니다.
var x = 10; var o = {x : 15}; function f () {alert (this.x);} f (); f.call (o);먼저, F () 호출은 현재의 글로벌 객체에 대한 지적이기 때문에 10의 대화 상자가 표시됩니다. 그런 다음 F 함수의 Call () 메소드를 호출하고, 전달 된 매개 변수는 O IS이며, 실행 결과는 X 속성의 값을 o 15로 보여줍니다. call () 메소드는 첫 번째 매개 변수를 F 함수에 대한 포인터로 사용합니다. 즉, 우리는 f 함수에서 이것을 반대하는 런타임을 알려줄 것입니다.
이 점프는 약간 재미있게 들리며 C ++, Java 및 C# 프로그래머에게는 이상입니다. 이것들은 모두 ECMAScript의 흥미로운 부분입니다.
Call ()를 통해 매개 변수를 함수로 전달할 수도 있습니다.
var x = 10; var o = {x : 15}; function f () {alert (this.x);} f (); f.call (o);apply ()와 call ()은 제 2 매개 변수가 배열이어야한다는 것을 제외하고는 유사합니다. 이 배열은 대상 함수에 대한 인수로 전달됩니다.
var x = 10; var o = {x : 15}; 함수 f (메시지) {alert (message); ALERT (this.x);} f ( '호출 f'); f.apply (o, [ ''fronce chone ']);apply () 메소드는 대상 방법의 매개 변수를 돌보지 않고 함수를 만들 수 있기 때문에 유용합니다. 이 함수는 Apply ()의 두 번째 배열 매개 변수를 통해 추가 매개 변수를 메소드로 전달할 수 있습니다.
var o = {x : 15}; 함수 f1 (messag f2, [x squared = ', 와우!');이 구문에는 문제가 있습니다. apply () 메소드를 호출하려면 목적 함수가 배열에서 매개 변수를 사용하도록 강요합니다. 다행히도이 구문을보다 쉽게 만들 수있는 방법이 있습니다. 그 전에는 먼저 하나를 소개해야합니다. 매개 변수 식별자.
JavaScript에서는 각 함수에는 실제로 가변 길이 매개 변수 목록이 있습니다. 즉, 함수에 하나의 매개 변수 만 있더라도 5 개의 매개 변수를 전달할 수 있습니다. 다음 코드에는 오류가 없으며 결과에는 "H"가 표시됩니다.
함수 f (메시지) {alert (message);} f ( 'h', 'e', 'l', 'l', 'o');F ()에서는 다른 매개 변수를 수락하지 않으려면 키워드 인수를 사용할 수 있습니다. 인수는 인수 객체를 나타내며, 이는 배열과 유사한 길이를 나타내는 속성을 갖습니다.
함수 f (메시지) {// 메시지 값은 (var i = 1; i <arguments.length; i ++) {message+= arguments [i]; } alert (message);} // 결과는 "hello"f ( 'h', 'e', 'l', 'l', 'o')를 보여줍니다.당신은 엄격하게 말하면 논쟁은 배열이 아니라는 것을 알아야합니다. 인수는 길이 속성이 있지만 분할, 푸시 및 팝 메소드는 없습니다. 이전 g () 함수에서 필요한 매개 변수를 인수에서 복사하고 배열을 형성 한 다음이 배열을 전달하여 ()를 전달할 수 있습니다.
var o = {x : 15}; function f (messag for (var i = 2; i <arguments.length; i ++) {args.push (arguments [i]); } func.Apply (object, args);} g (o, f, 'x squared =', '. 와우!');G ()를 호출하면 인수를 배열에 넣는 대신 추가 인수를 매개 변수로 전달할 수 있습니다.