<html> <head> </head> <body> <script type="text/javascript"> Array.prototype.myForEach = function(fn) { var arr = this, len = arr.length, arg2 = arguments[1] || window; for(var i = 0; i < len; i++) { fn.apply(arg2, [arr[i], i, arr]); } }; Array.prototype.myFilter = function(fn) { var arr = this, len = arr.length, arg2 = arguments[1] || window, newArr = []; for(var i =0; i < len; i++) { var item = deepClone(arr[i]); fn.apply(arg2, [item, i, arr])? newArr.push(item): '' } return newArr; } Array.prototype.myMap = function(fn) { var arr = this, len = arr.length, arg2 = arguments[1] || window, newArr = []; for(var i =0; i < len; i++) { var item = deepClone(arr[i]); newArr.push(fn.apply(arg2, [item, i, arr])); } return newArr; } Array.prototype.myReduce = function(fn, initialValue) { var arr = this, len = arr.length, arg2 = arguments[2] || window; for(var i = 0; i < len; i++) { initialValue = fn.apply(arg2, [initialValue, arr[i], i, arr]); } return initialValue; } Array.prototype.myEvery = function(fn) { var arr = this, len = arr.length, arg2 = arguments[1] || window, flag = true; for(var i = 0; i < len; i++) { if(!fn.apply(arg2, [arr[i], i, arr])) { flag = false; break; } } return flag; } Array.prototype.mySome = function(fn) { var arr = this, len = arr.length, arg2 = arguments[1] || window, flag = false; for(var i = 0; i < len; i++) { if(fn.apply(arg2, [arr[i], i, arr])) { flag = true; break; } } return flag; } function deepClone(source, target) { var target = target || {}; for(var key in source) { if(typeof(source[key]) === 'object' && source[key] !== null) { if(Object.prototype.toString.call(source[key]) === '[object Object]') { target[key] = {}; } else if(Object.prototype.toString.call(source[key]) === '[object Array]') { target[key] = []; } deepClone(source[key], target[key]); } else { target[key] = source[key] } } return target; } var arr = [{id: 1}, {id: 2}]; arr.myForEach(function(item, index, myArr){ item.id = item.id +1; }); var arrFilter = arr.myFilter(function(item, index, myArr) { return item.id > 2; }); var arrMap = arr.myFilter(function(item, index, myArr) { return item.id = item.id + 2; }); var arr1 = [1, 3, 5, 6]; console.log(arr1.myReduce(function(prev, elem){ return prev = prev + elem; }, 0)); console.log(arr1.myEvery(function(item){ return item > 2; })); console.log(arr1.mySome(function(item){ return item > 2; })); console.log(arr); var obj1 = { a: 1, b: { c: { d: 4 } }, e: null, f: undefined, g: false, h: [{id: 1}, 2, {child: {name: 'test'}}] }; var obj2 = {}; deepClone(obj1, obj2); console.log(obj2); </script> </body> </html>