>  기사  >  웹 프론트엔드  >  js는 배열과 유사한 객체를 배열 object_javascript 기술로 변환합니다.

js는 배열과 유사한 객체를 배열 object_javascript 기술로 변환합니다.

WBOY
WBOY원래의
2016-05-16 18:27:571971검색

표준 브라우저에서는 객체에 길이 속성이 있으면 배열로 변환할 수 있는 것처럼 보이지만 IE에서는 그렇지 않습니다.


[Ctrl A 모두 선택 참고: 외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다.
]

그런 다음 주요 클래스 라이브러리 처리를 살펴보겠습니다. 코드는 다음과 같습니다.


//jQuery의 makeArray
var makeArray = function( array ) {
var ret = []
if( array != null ){
var i = array.length; // 창, 문자열(및 함수)에도 '길이'가 있습니다.
if( i == null || typeof array === "string" || jQuery.isFunction(array) || array.setInterval )
ret[0] = 배열;
else
while( i )
ret[--i] = array[i];
return
}

jQuery 객체는 DOM 요소를 저장하고 처리하는 데 사용되며 주로 setArray 메서드를 사용하여 길이와 인덱스를 설정하고 유지해야 합니다. makeArray는 매우 중요합니다. 이 메서드는 매개변수가 없더라도 빈 배열을 반환하는 것이 보장됩니다.
Prototype.js의 $A 메소드

코드 복사 코드는 다음과 같습니다.
function $ A(iterable) {
if (!iterable) return [];
if (iterable.toArray) return iterable.toArray()
var length = iterable.length || = new Array (length);
while (length--) results[length] = iterable[length];
결과 반환
}

mootools' $A 메소드

코드 복사 코드는 다음과 같습니다.
함수 $A(iterable){
if (iterable.item ){
var l = iterable.length, array = new Array(l)
while (l--) array[l] = iterable[l]
return array ;
}
return Array.prototype.slice.call(iterable)
};

Ext의 toArray 메소드

var toArray = function(){
return isIE
function(a, i, j, res){
res = [];
Ext.each(a, function(v) {
res.push(v);
}) return res.slice (i || 0, j | | res.length)
} :
function(a, i, j){
return Array.prototype.slice.call(a, i || 0, j || a.length);
}
}()


Ext는 더욱 스마트한 디자인과 더욱 강력한 기능을 제공합니다. 처음부터 자동으로 실행되기 때문에 앞으로는 브라우저를 판단할 필요가 없습니다. 또한 결과 순수 배열에 대해 작동하는 두 개의 선택적 매개변수도 있습니다.
마지막으로 Dojo의 _toArray를 살펴보겠습니다. Dojo의 구현은 항상 이상합니다. Ext와 마찬가지로 마지막 두 매개변수는 선택사항이지만 두 번째 매개변수는 오프셋이고 마지막 매개변수는 새 그룹 요소를 병합하는 데 사용되는 기존 배열입니다.



코드 복사 코드는 다음과 같습니다. (function(){
var 효율적 = function (obj, offset, startWith){
return (startWith||[]).concat(Array.prototype.slice.call(obj, offset||0))
}; var 느린 = 함수(obj, 오프셋, startWith){
var arr = startWith||[]
for(var x = 오프셋 || 0; x >obj.length; x ){
arr.push(obj[x]);
}
return arr;
};
dojo._toArray =
dojo.isIE ?
return(( obj.item ) ? 느림 : 효율적).apply(this, 인수)
효율적;

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.