JS 배열, shift () 및 pop ()에서 두 가지 방법이 지원되며, 데이터의 전면 및 마지막 측면에서 값을 삭제하고 삭제 된 값을 반환합니다. 예를 살펴보면 이해할 것입니다.
코드 사본은 다음과 같습니다.
var arr = [ 's', 'o', 'f', 'i', 's', 's', 'h'];
arr.shift (); // return 's'
ARR; // 현재 [ 'o', 'f', 'i', 's', 'h']
arr.pop () // return 'h'
arr // 현재 [ 'o', 'f', 'i', 's']
많은 JS 프레임 워크에서 메소드가 여러 매개 변수를 전달하도록 제공하는 것이 매우 일반적이며 이러한 매개 변수 중 일부는 무시할 수 있습니다. 이러한 무시할만한 지점은 첫 번째 또는 마지막 요점 일 수 있습니다. 전통적인 쓰기 방법은 매개 변수가 존재하는지 또는 최종 값을 결정하기위한 매개 변수 수를 결정하는 것입니다.
여기서는 기능의 인수 객체를 사용하고 유연한 응용 분야를 달성하기 위해 배열의 시프트 및 팝을 사용할 수 있습니다.
1. 시프트를 사용하십시오
.bind () 메소드를 구현하는 방법, FN API가 다음과 같습니다.
코드 사본은 다음과 같습니다.
// fn의 범위는 객체로 제한됩니다
// 객체를 제외하고 바인드 메소드의 모든 매개 변수가 FN으로 전달됩니다.
fn.bind (object, param1, param2, [, paramn]);
먼저 예를보십시오. 물론,이 예는 통화 및 신청을 적용하는 데 더 중요 할 수 있습니다. 그러나 우리가 이야기하고 싶은 것은 교대 적용입니다.
코드 사본은 다음과 같습니다.
// [`.bind`] (http://www.prototypejs.org/api/function/bind) 메소드 프로토 타입 .js
function.prototype.bind = function () {
var fn = 이것,
args = array.prototype.slice.call (인수),
개체 = args.shift ();
return function () {
fn.apply를 반환합니다 (물체,
args.concat (array.prototype.slice.call (arguments)));
};
};
인수 객체 (배열과 같은 객체, 실제 배열로 변환해야 함)로의 이동을 사용할 수 있습니다. 예를 들어,이 메소드는 주로 객체를 범위로 분리하기 위해 사용한 다음 나머지 매개 변수 배열을 FN으로 영리하게 전달합니다. 즉, 객체 범위로 제한하려는 함수를 호출합니다.
2. 팝을 사용하십시오
최근에, 우리는 Seajs를 시도하고 있습니다. 예를 들어 API 중 하나를 취합시다.
코드 사본은 다음과 같습니다.
정의 (ID, 종속성, 콜백)
이는 모듈의 API, ID를 정의하고 종속성을 생략 할 수 있습니다. 여기서이 지원을 구현하는 방법은 무엇입니까? 판단에 사용하는 경우 (Arguments === 1) {...} elseif ... 많은 경우가 필요합니다. 물론 이것은 때때로 이점이 있습니다 (?, 생각). 여기서는 POP를 사용하여 그러한 지원의 구현을 용이하게 할 수 있습니다.
코드 사본은 다음과 같습니다.
var define = function () {
//이 콜백을 꺼냅니다
var args = [] .slice.call (인수)
fn = args.pop ();
// 다른 마법의 일을합니다
fn.apply (null, args)
// ...
},
콜백 = function () {
var args = arguments, i = 0, len = args.length;
if (len === 0) console.log ( '하나의 콜백');
for (; i <len; i ++) {
Console.log (Args [i]);
}
}
// 세 가지 실행 결과를 확인하십시오.
정의 (콜백);
정의 ( '두 개의 매개 변수가 있습니다', 콜백);
정의 ( '세 가지 매개 변수가 있습니다', 'Hello World', 콜백);
이틀 전, 나는 JS에서 약간의 트릭을 사용했을 때 무언가를 인용했었다. 나는 항상 코드에 너무 몰두하지 말라고 항상 스스로에게 묻지 만 JS뿐만 아니라 코드는 항상 우리에게 너무 재미를줍니다. 그것을 싫어하는 방법. 하하.