[JavaScript] 纯文本查看 复制代码
function isArrayLike ( array ) {
var length = array && array.length;
return typeof length === 'number' && length >= 0;
}
function each ( array, callback ) {
var i, k;
if ( isArrayLike( array ) ) {
// 使用 for 循环
for ( i= 0; i < array.length; i++ ) {
if( callback.call( array[ i ], i, array[ i ] ) === false ) break;
}
} else {
// 使用 for-in 循环
for ( k in array ) {
if( callback.call( array[ i ], k , array[ k ] ) === false ) break;
}
}
return array;
}
function map ( array, callback ) {
var i, k,
res = [],
tmp;
if ( isArrayLike( array ) ) {
// 使用 for 循环
for ( i= 0; i < array.length; i++ ) {
tmp = callback( array[ i ], i );
if ( tmp !== undefined ) {
res.push( tmp );
}
}
} else {
// 使用 for-in 循环
for ( k in array ) {
tmp = callback( array[ k ], k );
if ( tmp !== undefined ) {
res.push( tmp );
}
}
}
return res;
}
function select( selector ) {
return document.querySelectorAll( selector );
}
function Itcast( selector ) {
// 初始化 this 是伪数组
var list = select( selector );
[].push.apply( this, list ); // 将 list 中的每一个元素 一一 的加到 this 中, 并且会自增 length 属性
return this;
}
Itcast.prototype = {
// 添加方法
constructor: Itcast,
each: function ( callback ) {
// 将 this 作为数组, 遍历数组, 使用 callback 处理数组的每一个元素
each( this, callback );
},
map: function( callback ) {
map( this, callback );
}
}
new Itcast( 'div, span' ).each(function () {
this.style.border = '1px dashed red';
})