클래스 그룹 변환수 그룹 방법 설명

클래스 배열 변환: Array.prototype.slice.call(arguments) 메서드 참고:
알아요, Array.prototype.slice.all(arguments)는length 속성을 가진 대상을 수조로 변환할 수 있다.IE 아래의 노드 집합을 제외하고(ie 아래의dom 대상은com 대상의 형식으로 이루어지기 때문에 js 대상과com 대상은 변환할 수 없다)
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]
아마도 js의 아동화를 처음 배우기 시작했을 것이다. 이 문장이 왜 이런 기능을 실현할 수 있는지 잘 이해하지 못할 것이다.예를 들면 내가 하나니까 탐구해 보자.
우선, 슬라이스는 두 가지 용법이 있는데, 하나는 String이다.slice, 하나는 Array.slice, 첫 번째는 문자열이고, 두 번째는 수조입니다. 여기서 두 번째를 보겠습니다.
Array.prototype.slice.call(arguments)는arguments를 수조로 변환할 수 있다. 바로arguments이다.toArray().slice();여기까지만 하면 Array라고 할 수 있죠.prototype.slice.call(arguments)의 과정은 먼저 들어온 첫 번째 파라미터를 수조로 바꾸고 슬라이스를 호출하는 것입니까?
다시 콜의 용법을 보면 다음과 같다.
var a = function(){
      console.log(this);    // 'littledu'
      console.log(typeof this);      //  Object
      console.log(this instanceof String);    // true
 }
 a.call('littledu');
에서 알 수 있듯이call이 된 후에 현재 함수를 전달된 매개 변수의 작용역에 밀어넣었다. 이렇게 말하는 것이 맞는지 모르겠지만 어쨌든this는 전달된 대상을 가리키면 확실하다.
여기까지 거의 차이가 나지 않는다. 우리는 슬라이스의 내부 실현을 대담하게 추측할 수 있다. 아래와 같다.
Array.prototype.slice = function(start,end){
      var result = new Array();
      start = start || 0;
      end = end || this.length; //this , call , this , , 
      for(var i = start; i < end; i++){
           result.push(this[i]);
      }
      return result;
 }
대충 그렇겠지, 이해하면 돼, 깊이 따지지 마.
마지막으로, 수조로 변환되는 통용 함수를 첨부합니다
 var toArray = function(s){
     try{
         return Array.prototype.slice.call(s);
     } catch(e){
             var arr = [];
             for(var i = 0,len = s.length; i < len; i++){
                 //arr.push(s[i]);
                  arr[i] = s[i]; <span style="color:#cc0000;"> // push </span>
             }
              return arr;
     }
}

좋은 웹페이지 즐겨찾기