>웹 프론트엔드 >JS 튜토리얼 >JS_javascript 기술에서 무시할 수 있는 매개변수를 생성하기 위해 배열 함수 Shift 및 Pop을 사용하는 예

JS_javascript 기술에서 무시할 수 있는 매개변수를 생성하기 위해 배열 함수 Shift 및 Pop을 사용하는 예

WBOY
WBOY원래의
2016-05-16 16:46:331767검색

JS Array는 Shift()와 pop()이라는 두 가지 메소드를 지원하는데, 각각 데이터의 앞과 끝에서 값을 삭제하고 삭제된 값을 반환하는 것을 의미합니다. 이해하려면 예를 살펴보십시오.

코드 복사 코드는 다음과 같습니다.

var arr = ['s','o','f','i','s','h'];

arr.shift(); // 's'를 반환합니다.
arr; // 현재 ['o','f','i','s','h']
arr.pop () // 'h'를 반환합니다
arr // 현재는 ['o','f','i','s']


많은 JS 프레임워크에서 매우 일반적입니다. 메소드를 사용하면 여러 매개변수를 전달할 수 있으며 이러한 매개변수 중 일부는 무시될 수 있습니다. 전통적인 작성 방식은 매개변수가 존재하는지, 또는 매개변수의 개수를 확인하여 최종 값을 결정하는 것입니다.

여기서 함수의 인수 개체를 사용할 수 있을 뿐만 아니라 배열의 Shift 및 Pop을 사용하여 유연한 애플리케이션을 구현할 수 있습니다.

1. Shift
를 사용하여 .bind() 메소드를 구현하는 방법, fn api는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

// fn의 범위는 객체로 제한됩니다.
// 객체를 제외하고 바인드 메소드의 모든 매개변수는 객체로 전달됩니다. fn
fn.bind(object, param1, param2, [, paramN]);

먼저 예시를 살펴보겠습니다. 물론, 이 예에서 더 중요할 수 있는 것은 호출 및 적용의 적용입니다. 그런데 우리가 이야기하고 싶은 것은 시프트의 적용이다:
코드 복사 코드는 다음과 같다:

//Prototype.js의 [`.bind`](http://www.prototypejs.org/api/function/bind) 메서드
Function.prototype.bind = function(){
var fn = this,
args = Array.prototype.slice.call(arguments),
object = args.shift();
return function(){
return fn.apply( object,
args.concat(Array.prototype.slice.call(arguments)));
};
};

args 개체(배열과 유사한 개체, 실제 배열로 변환해야 함)을 Shift로 꺼내려면 이 방법과 마찬가지로 객체를 범위로 분리하는 데 주로 사용하고 나머지 매개 변수 배열을 교묘하게 fn에 전달합니다. 즉, 함수를 호출합니다. 개체 범위로 제한하고 싶습니다.

2. pop 사용
최근에 seajs의 API 중 하나를 사용해 보겠습니다.

코드 복사 코드는 다음과 같습니다.

define(id, dependency, callback)

모듈의 api를 정의하며, id와 dependency는 생략 가능합니다. 이 지원을 구현하는 방법은 무엇입니까? 판단하기 위해 if를 사용한다면 실제로 if (arguments === 1) {...} elseif ...를 많이 사용해야 합니다. 물론 이게 장점이 되는 경우도 있습니다(?, 생각해 보세요). 여기서는 이러한 지원 구현을 용이하게 하기 위해 pop을 사용할 수 있습니다.
코드 복사 코드는 다음과 같습니다.

var 정의 = function(){
// 이 콜백 제거
var args = [].slice.call(arguments)
fn = args.pop();
// 다른 흥미로운 일을 하세요
fn.apply(null, args)
// ...
},
callback = function(){
var args =args, i = 0, len = args.length;
if(len === 0) console.log('단 하나의 콜백');
for(;i console.log( args[i ]);
}
}

// 세 가지의 실행 결과를 살펴보세요
define(callback);
define('매개변수가 2개 있습니다', callback);
define('매개변수가 3개 있습니다', 'hello world', callback);


이틀 전 동료들과 JS에서 몇 가지 기술을 배울 때 만든 참고 자료입니다. 항상 코드에 너무 몰입하지 말라고 다짐하지만, JS뿐만 아니라 코드도 늘 우리에게 너무 많은 재미를 줍니다. 좋아하지 않는 방법. 하하.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.