數組去重,call、apply、bind之間的區別,this用法總結

1、數組去重,直接寫到Array原型鏈上。數組

 1 //該方法只能去除相同的數字   不會去判斷24和'24'是不一樣的   全部數字和字符串數字是相同是重複的
 2 Array.prototype.redup=function(){
 3     var obj={};
 4     for(var i=0;i<this.length;i++){
 5         var val=this[i];
 6         if(obj[val]==this[i]){  //若是發現重複的
 7             this[i]=this[this.length-1];   //那就把最後一個賦值給當前的這個數組元素
 8             this.pop();  //並把最後一個元素刪除
 9             i--; //數組長度減小  那麼i也要減下   下次循環重複判斷該i位置的值是否重複
10         }
11         obj[val]=val;
12     }
13     obj=null;   //釋放掉null
14     return this;  //返回這個去重的數組
15 }
16 
17 arr=[24,25,24,26,24,25,23,24,25,26];
18 console.log(arr.redup());//[24,25,26,23];

2、call    apply    bind  之間的區別app

 1 //call、apply、bind都是改變函數的中this上下文的
 2 //call、apply很是的類似,惟一的區別的就是call是單個傳參,除第一個參數是改變this指向  其餘參數根據函數的參數來定
 3 //而apply一共就兩個參數,第一個參數改變this指向,第二個參數是數組 ,是函數參數的集合。
 4 //call,apply不但會改變this指向  而且會執行函數
 5 //但bind和上面有點區別,一樣第一個參數是改變this指向,後面的參數也是傳給函數的參數   但bind並不執行函數
 6 function sum(a,b){
 7     this.sum=a+b;
 8     console.log(this.sum);
 9 }
10 function fn(){
11 }
12 sum.call(fn,1,2);  //3     把this指向fn  因此fn有sum屬性了   而且執行sum函數
13 console.log(fn.sum);  //3
14 sum.apply(fn,[2,3]);  //5   把this指向fn  因此fn有sum屬性了   而且執行sum函數
15 console.log(fn.sum);  //5
16 sum.bind(fn,3,4);      //bind並不執行函數   因此  這裏什麼都不打印
17 console.log(fn.sum);  //5  //bind當中只是改變了this指向   並無執行  也沒有出現賦值步驟  因此  fn.sum保持之前的值
18 sum.bind(fn,3,4)();  //7   //執行函數  改變fn.sum屬性的值  並打印
19 console.log(fn.sum);  //7
20 
21 //這裏還有一點須要值得注意的   在非嚴格模式下    無論call,bind,apply沒有明確指向誰   默認就是window
22 sum.call();//  this  指向window
23 sum.call(null);//  this  指向window
24 sum.call(undefined);//  this  指向window
25 //而在嚴格模式下
26 sum.call();//  this  指向undefined
27 sum.call(null);//  this  指向null
28 sum.call(undefined);//  this  指向undefined

this用法總結函數

第一句話:this是誰和函數的在哪執行的以及在哪定義的都木有半毛錢關係this

this是誰分幾種狀況:spa

第一種:函數誰調用this就指向誰,主要看函數(方法)前面的 . 是誰   那麼this就是誰   沒有 . 那就是window咯prototype

第二種:在構造函數中  this  指的是當前構造函數中的實例    (固然  方法中的this不算   那麼方法的this是誰?  看第一種狀況);code

第三種:就是call,apply,bind   那就直接看上面吧   第一個參數是誰   那麼this就是誰    沒有參數呢?上面講的很清楚了   blog

第四種:函數自執行   像這樣(function(){})()      好吧   在非嚴格模式下     this指的就是window    而在嚴格模式下    this 是undefined;  因此,嚴格模式要寫上執行主體哈。原型鏈

相關文章
相關標籤/搜索