js中的內置方法的兼容寫法
阿新 • • 發佈:2017-11-19
div return 所有 argument 數組 sub arr concat ***
1、如果瀏覽器不支持every屬性,every的實現原理
if(Array.prototype.every===undefined){ Array.prototype.every=function(fun){ //遍歷當前數組中每個元素 for(var i=0;i<this.length;i++){ if(this[i]!==undefined){ //調用fun,依次傳入當前元素值,位置i,當前數組作為參數 ,將返回值,保存在變量r中 var r=fun(this[i],i,this); if(r==false){//如果r為false return false;//返回false } } }//(遍歷結束) return true;//返回true } }
2、如果瀏覽器不支持some屬性,some的實現原理
if(Array.prototype.some===undefined){ Array.prototype.some=function(fun){ for(var i=0;i<this.length;i++){ if(this[i]!==unefined){var r=fun(this[i],i,this); if(r==true){ return true; } } } return false; } }
3、瀏覽器不支持map屬性,map的實現原理
if(Array.prototype.map===undefined){ Array.prototype.map=function(fun){ //創建空數組: newArr var newArr=[]; //遍歷當前數組中每個元素 for(var i=0;i<this.length;i++){ //如果當前元素不是undefined if(this[i]!==undefined){//判斷稀疏數組 //調用fun傳入當前元素值,位置i,當前數組,將結果保存在r中 //將newArr的i位置賦值為r var r=fun(this[i],i,this); newArr[i]=r; } }//(遍歷結束) return newArr;//返回newArr } }
4、如果瀏覽器不支持reduce屬性,reduce的實現原理
if(Array.prototype.reduce===undefined){ Array.prototype.reduce=function(fun,base){ base===undefined&&(base=0); for(var i=0;i<this.length;i++){ if(this[i]!==undefined){ base=fun(base,this[i],i,this); } } return base; } }
5、如果瀏覽器不支持bind屬性, bind函數的實現原理
if(Function.prototype.bind===undefined){ Function.prototype.bind=function(obj/*,參數列表*/){ var fun=this;//留住this //*****將類數組對象,轉化為普通數組 var args=Array.prototype.slice.call(arguments,1); //args保存的就是提前綁定的參數列表 /*function slice(1){ var sub=[]; for(var i=0;i<length;i++){ sub.push(arguments[i]); } return sub; }*/ return function(){ //將後傳入的參數值,轉為普通數組 var innerArgs=Array.prototype.slice.call(arguments);//將之前綁定的參數值和新傳入的參數值,拼接為完整參數之列表 var allArgs=args.concat(innerArgs) //調用原始函數fun,替換this為obj,傳入所有參數 fun.apply(obj,allArgs); } } }
js中的內置方法的兼容寫法