Copy code code as follows:
var ForEach = (function () {
Traversal of arrays and pseudo arrays
var _array_foreach = function (Array, block, context) {
if (array = = null) return;
Special handling of String
if (typeof array = = ' string ') {
Array = Array.split (');
}
var i = 0,length = Array.Length;
for (; i < length && Block.call (context, Array[i], (i+1), array)!==false; i++) {}
};
Traversal of objects
var _function_foreach = Function (object, block, context) {
for (var key in object) {
Traverse Local Properties only
if (Object.hasownproperty (key) &&block.call (context, Object[key], key, object) ===false) {
Break
}
}
};
return function (object, blocks, context) {
if (object = = null) return;
if (typeof object.length = = "Number") {
_array_foreach (object, block, context);
}else{
_function_foreach (object, block, context);
}
};
})()
The function itself is not complex, but very ingenious. Add a few simple comments, think you can read.
Take a look at some examples
Copy Code code as follows:
1:1 \ n 2:2
ForEach ([1,2,3,4,5],function (El,index) {
if (index>2) {
return false;
}
Alert (index+ ":" +el);
});
function Print (El,index) {
Alert (index+ ":" +el);
}
A:A \ b:b \ C:c
ForEach ({A: ' A ', B: ' B ', C: ' C '},print);
1: Stupid 2: Eggs \ n 3: \ n 4: Block \ n 5: Right \ n 6: Ming
ForEach ("Idiot's motto", print);
function person (name, age) {
this.name = Name | | "";
This.age = Age | | 0;
};
Person.prototype = new Person;
var fred = new Person ("JXL", 22);
Fred.language = "Chinese";//very late binding
NAME:JXL \ age:22 \ Language:chinese
ForEach (Fred,print);
Note: The index parameter subscript in the callback function starts at 1
Why not use a built-in foreach
As with Getelementsbyclassname, the built-in foreach is highly efficient, but has limited functionality and is unable to exit in the middle of the loop. In our foreach, it can exit the loop in a handler function by returning false, more flexible.
The Special Length property
The Length property is a very special property, and when you see an array, you must think of length, and see the object with the length attribute? Then you must think of a pseudo array (an array of classes). So what is a pseudo array? The simple understanding is that it can be converted to a true array of objects with the length attribute through Array.prototype.slice. The most famous pseudo array of JavaScript is the arguments object. There are a lot of things about pseudo arrays, and I'm going to write a blog post about this stuff later. Just remember: Don't give the object the length attribute, unless you know for sure that you're going to use it as an array of perjury.
I think this function is a simple JavaScript library of the necessary functions, it is the foundation of the pyramid, on its basis, the encapsulation, you can make your library more powerful, more beautiful!