클래스 그룹 변환수 그룹 방법 설명
2051 단어 배열 변환어떻게 수조로 바꿔요?클래스 그룹 변환 그룹
알아요, 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;
}
}