function forEach(object, block, context, fn) {
if (object == null) return;
if (!fn) {
if (typeof object == "function" && object.call) {
//通常のオブジェクトを走査します
fn = Function ;
} else if (typeof object.forEach == "function" && object.forEach != argument.callee) {
// ターゲットが forEach メソッドを実装している場合は、独自の forEach メソッドを使用します(標準ブラウザの Array オブジェクトなど)
object.forEach(block, context);
return;
} else if (typeof object.length == "number") {
// Ifこれは、IE の配列オブジェクトまたは配列オブジェクトです。
_Array_forEach(object, block, context);
return
}
}
_Function_forEach(fn || Object, object, block,コンテキスト);
};
関数 _Array_forEach(array, block, context) {
if (array == null) return;
var i = 0,length = array.length; if (typeof array == "string") {
for (; i < length; i ) {
block.call(context, array.charAt(i), i, array);
} else{
for (;i < length; i ) {
block.call(context, array[i], i, array);
}
}
};
_Function_forEach = function(fn, object, block, context) {
// ここでの fn は常に Function
for (オブジェクトの var key) {
// ローカル プロパティのみをスキャンします
if ( object.hasOwnProperty(key)) {
//block(object[key], key) と同等
block.call(context, object[key], key, object);
}
};
原作者によるいくつかの例 (壁を飛び越えました! ):
alert(index " : " el)
}
forEach ([1, 2, 3], print);
forEach ({a: "aa", b: "bb", c: " cc"}, print);
forEach ("Situ Zhengmei", print);
forEach(document.styleSheets,function(el){
if(el.href) warning(el. href)
});
function person(name, age) {
this.名前 = 名前 || "";
this.age = 年齢
};
var fred = 新しい人; ;
fred. language = "English";//非常に遅いバインディング
fred.wife = "Wilma";//非常に遅いバインディング
forEach(fred,print)