javascript 연습 분석 (1)

3399 단어
Prototype. js 의 bind () 함수 이해
fun. bind (this, arg 1, arg 2) bind () 방법 은 새로운 함 수 를 만 들 것 입 니 다. 바 인 딩 함수 라 고 합 니 다. fun 방법 은 this 환경 에서 호출 (여기 this 는 임의의 대상 에 연결 할 수 있 습 니 다) 합 니 다. 이 방법 은 여러 개의 매개 변 수 를 연속 으로 전송 할 수 있 습 니 다. 첫 번 째 매개 변 수 는 this 이 고 두 번 째 및 이후 의 매개 변 수 는 함수 의 매개 변수 로 호출 됩 니 다.
// The .bind method from Prototype.js
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));
        )
    }
}

1. Array. slice () 와 shift (), concat ()
slice () 는 두 가지 가 있 는데 하 나 는 string. slice () 이 고 다른 하 나 는 Array. slice () 이다.배열 Array 에서 slice () 는 현재 배열 의 하나 이상 의 항목 을 기반 으로 새 배열 을 만 들 수 있 습 니 다.항목 의 시작 과 끝 위 치 를 되 돌려 주 는 매개 변 수 를 하나 또는 두 개 받 아들 일 수 있 습 니 다.하나의 인자 만 있 는 상황 에서 slice () 방법 은 이 매개 변수 가 지정 한 위치 에서 현재 배열 의 끝 에 있 는 모든 항목 을 되 돌려 줍 니 다.두 개의 인자 가 있 으 면 이 방법 은 시작 과 위치 끝 위치 사이 의 항목 을 되 돌려 줍 니 다. 그러나 끝 위치 항목 은 포함 되 지 않 습 니 다. 또한 slice () 방법 은 원본 배열 shift () 에 영향 을 주지 않 습 니 다. 한 배열 의 맨 앞 값 을 삭제 하고 삭제 값 을 되 돌려 줍 니 다. concat (): 현재 배열 의 모든 항목 을 기반 으로 새 배열 을 만 들 수 있 습 니 다.구체 적 으로 말 하면 이 방법 은 현재 배열 의 사본 을 만 든 다음 에 받 은 매개 변 수 를 이 사본 의 끝 에 추가 하고 마지막 으로 새로 구 축 된 배열 로 돌아 갑 니 다.
var colors = ["red", "green", "blue", "yellow", "purple"];
var color1 = colors.concat("yellow",["black","brown"]);
var colors2 = colors.slice(1); 
var colors3 = colors.slice(1,4);
alert(color1);         //red,green,blue,yellow,purple,yellow,black,brown
alert(colors2);        //green,blue,yellow,purple
alert(colors3);        //green,blue,yellow
alert(colors);         //red,green,blue,yellow,purple

2. call () 과 apply ()
call () 과 apply () 방법 은 함수 의 역할 영역 을 확장 하 는 데 사 용 됩 니 다. (첫 번 째 매개 변 수 를 자신의 this 로) call () 과 apply () 방법 은 두 개의 매개 변 수 를 받 습 니 다. apply (): 첫 번 째 매개 변 수 는 역할 영역 이 고 두 번 째 매개 변 수 는 매개 변수 배열 입 니 다. 그 중에서 두 번 째 참 수 는 배열 인 스 턴 스 일 수도 있 고 arguments 대상 일 수도 있 습 니 다.call (): 첫 번 째 매개 변 수 는 여전히 역할 영역 이지 만 전송 방식 이 다 르 기 때문에 매개 변 수 는 하나씩 기록 해 야 합 니 다.
3. Array. prototype. slice. call (인수)
arguments 는 현재 파 라 메 터 를 대표 하 는 키워드 입 니 다. 자바 script 에서 arguments 는 겉 으로 는 배열 로 표시 되 지만 실제로는 원생 slice 기능 이 없 기 때문에 call 방법 을 사용 하 는 것 은 arguments 대상 의 불완전한 배열 기능 에 대한 수정 이 라 고 할 수 있 습 니 다.Array. prototype. slice. call (arguments) = = Array. prototype. slice. call (arguments, 0) Array. prototype. slice 는 Array 의 원형 방법 을 호출 합 니 다. 실제 배열 에 대해 서 는 slice () 방법 이 있 지만 arguments 나 자신 이 정의 하 는 일부 배열 대상 에 대해 서 는 length 등 몇 가지 속성 이 존재 하지만 slice () 방법 은 없습니다.따라서 이러한 배열 대상 에 대해 서 는 slice () 방법, 즉 Array. prototype. slice 를 원형 으로 사용 해 야 합 니 다. (사용자 정의 클래스 배열 대상 에서 slice () 방법 을 사용자 정의 하면 자 연 스 럽 게 직접 호출 할 수 있 습 니 다)따라서 Array. prototype. slice. call (arguments, 0) 은 arguments 류 배열 에 대해 우 리 는 Array. prototype. slice 원형 방법 을 호출 하고 call () 방법 으로 작용 도 메 인 을 arguments 에 한정 합 니 다. 이때: Array. prototype = = arguments, 매개 변수 0 비트 slice () 방법 으로 첫 번 째 매개 변수, 즉 시작 위치 색인,이 방법 을 통 해 arguments 류 배열 을 진짜 배열 로 바 꾸 었 습 니 다.
var a = {
    length: 2,
    0: 'first',
    1: 'second'
};
Array.prototype.slice.call(a);    //["first","second"]
var a = {length: 2};
Array.prototype.slice.call(a);    //["undefined","undefined"] 

좋은 웹페이지 즐겨찾기