() 메소드 정의를 적용합니다
함수의 apply () 메소드와 호출 메소드는 동일한 함수를 가지지 만 차이는 수신 된 매개 변수가 다르다는 것입니다.
apply () 메소드는 두 매개 변수를 수신합니다. 하나는 객체이고 다른 하나는 매개 변수 배열입니다.
() 함수를 적용하십시오
1. 함수의 범위를 확장하는 데 사용됩니다
예:
var color = 'red'; var o = {color : 'blue'}; function saycolor () {console.log (this.color);} saycolor (); // "red"saycolor.apply (o); "blue"여기서, 함수는 apply () 메소드를 통해 객체 O에 동적으로 바인딩됩니다. 현재 이것은 O 객체를 가리키고 결과를 "파란색"으로 얻습니다.
2. 객체는 방법과의 결합 관계가 필요하지 않습니다.
아래 커플 링의 예를 들어 적용 하여이 커플 링을 해결하는 방법을 살펴 보겠습니다.
var color = 'red'; var o = {color : 'blue'}; function saycolor () {console.log (this.color);} o.saycolor = saycolor; o.saycolor (); "blue"여기서는 기능이 객체 O에 먼저 배치되고 객체와 메소드가 밀접하게 연결되며 메소드 호출은 객체 O를 통과해야합니다.
apply () 및 call () 메소드를 사용하는 것만 큼 유연하지 않습니다.
위의 코드를 리팩터하여 이전 예제에서 코드를 가져옵니다.
var color = 'red'; var o = {color : 'blue'}; function saycolor () {console.log (this.color);} saycolor (); // "red"saycolor.apply (o); "blue"여기서 객체에 바인딩 된 메소드는 없지만 사용해야 할 때는 기능의 적용 또는 호출 메소드를 사용하여 동적으로 바인딩하십시오.
객체와 방법 사이에는 커플 링이 없습니다. 여기서는 ES5에 의해 제공된 bind () 메소드를 통해 수행 할 수 있습니다.
3. 가변 매개 변수 함수 매개 변수 전송 구현
숫자의 평균 값을 계산하는 다음 기능
평균 (,,); 평균 (); 평균 (,,,,,); 평균 (,,,,); 평균 (,,,,,,,););
평균 함수는 돌연변이 가능한 매개 변수 또는 돌연변이 가능한 요소 함수라고하는 예입니다 (함수의 요소 수는 원하는 매개 변수 수를 나타냅니다).
물론,이 기능은 수신 배열 형태로도 작성 될 수도 있습니다.
AverageOfArray ([,]); AverageOfArray ([]); AverageOfArray ([,,,,,,,]); AverageOfArray ([,,,,,,,,]);
변수 매개 변수를 사용하는 함수는 더 간결하고 우아합니다. 가변 매개 변수 함수는 편리한 구문을 가지므로 최소한 발신자가 제공되는 매개 변수 수를 미리 알 수 있습니다.
이런 배열이 있다면
var scores = getAllScores ();
평균 함수를 사용하여 평균 값을 계산하는 방법은 무엇입니까?
1. 변수 매개 변수 함수 버전.
현재 Apply () 메소드와 함께 사용할 수 있습니다. 함수는이 변수를 참조하지 않기 때문에 첫 번째 매개 변수에 대해 NULL을 전달합니다. 코드는 다음과 같습니다.
var scores = getAllScores (); 평균 .apply (null, scores);
2. 직접 매개 변수는 배열 형태입니다
여기서 배열 매개 변수를 직접 전달할 수 있습니다.
var scores = getAllScores (); 평균 오버레이 (점수);
나는 개인적으로 위의 두 가지 형태가 모두 괜찮다고 생각하지만 두 번째 형태는 더 간단하다고 생각합니다. 코드를 리팩토링하지 않고 다른 사람이 작성한 기능을 만나면 쉽게 처리 할 수있는 방법에 대해 자세히 알아보십시오. 이 혜택은 훨씬 더 많습니다.
4. 변수 매개 변수 방법의 값 전송을 구현하십시오
예 : 버퍼 객체에는 변이 가능한 매개 변수 첨부 메소드가 포함되어 있으며 함수 내부의 상태 배열에 추가됩니다.
var buffer = {state : [], append : function () {for (var i =, n = arguments.length; i <n; i ++) {this.state.push (arguments [i]);}}};이 시점에서 Append 메소드는 여러 매개 변수를 허용 할 수 있습니다.
buffer.append ( 'hello,'); buffer.append ( 'firtname', '', 'lastname', '!'); buffer.append ( 'newline');
다음과 같은 형태
Buffer.Append (Arg1, Arg2, Arg3, ...)
이 적용 메소드 의이 매개 변수를 사용하면 컴퓨팅 가능한 배열을 지정하여 Append 메소드를 호출 할 수 있습니다.
buffer.append.apply (buffer, getInputStrings ());
참고 : 여기 버퍼가 중요합니다. 다른 객체가 전달되면 Append 메소드는 잘못된 오브젝트의 상태 특성을 수정하려고 시도합니다.
힌트
• 적용 메소드를 사용하여 계산 가능한 매개 변수 배열을 지정하여 변수 매개 변수가있는 함수를 호출하십시오.
• 적용 메소드의 첫 번째 매개 변수를 사용하여 변수 매개 변수 메소드에 수신기를 제공합니다.
부록 1
평균 기능
함수 평균 () {var args = []. slice.call (arguments); var sum = args.reduce (function (prev, cur) {return prev+cur;}); return parseint (sum/args.length,);}평균 오류 기능
함수 평균 오버레이 (arr) {var sum = arr.reduce (function (prev, cur) {return prev+cur;}); return parseint (sum/arr.length,);}es5 bind () 메소드
이 메소드는 값이 bind () 함수로 전달 된 값에 바인딩되는 함수의 인스턴스를 만듭니다.
예를 들어
var color = 'red'; var o = {color : 'blue'}; function sayscolor () {console.log (this.color);} var osaycolor = saycolor.bind (o); osaycolor (); // "blue"더 낮은 버전과 호환되며 다음 버전을 참조하십시오.
if (! function.prototype.bind) {function.prototyp.bind = function (othis) {if (type this! == 'function') {// ecmascript // 내부 iscallable function에 가능한 가장 가까운 것 new TypeError ( 'function.bind- rug aargs =} []. ), ftobind = this, fnop = function () {}, fbound = function () {return ftobind.apply (return fnop? fnop? this : othis, aargs.concat); 이. 프로토 타입; } fbound.prototype = new fnop (); return fbound;};}