1. 程式人生 > >JS高級之this是誰?

JS高級之this是誰?

function 找不到 構造函數 fun body 全局 為什麽 bsp ...

 1 <!--
 2 英語單詞:checkout:收銀臺 refresh:刷新
 3 const Index = () => import(‘/page/index.vue‘)//等於const Index = function a(){return import(‘/page/index.vue‘)}
 4 
 5 js高級之this是誰?
 6 this本質上就是調用了就指向誰,this在指向誰有以下4種情況:
 7 --------------------------------------------------------------------------------------
8 *this之普通函數: 9 function t(){ 10 this.age=23; 11 } 12 t();//如果沒有這方法就會報undefined,在window就找不到age 13 //這個調用者是null,this為null時,js把this指向window 14 //在es5及以後,當this為null時拋出異常 15 alert(window.age); 16 //函數內帶有this操作,不能直接調用,應該new,否則會汙染全局 17 -------------------------------------------------------------------------------------
18 *this之對象方法 19 window.name=‘kjx‘ 20 function intro() { 21 alert(‘my name is ‘+this.name); 22 } 23 var dog={ 24 name:‘孫小二‘, 25 } 26 dog.intro=intro; 27 dog.intro();//輸出是my name is 孫小二 28 var cat={ 29 name:‘加肥貓‘ 30 } 31 cat.intro=intro; 32 cat.intro();//輸出是my name is 加肥貓
33 (cat,intro=dog.intro)();//輸出是全局變量my name is kjx,如果沒有定義全局變量的話就會沒有輸出,賦值運算的結果是一個值,如果你拿一個值來調用這個值不屬於任何一個對象 34 -------------------------------------------------------------------------------------- 35 *this之構造函數: 36 var a = new fn(); 37 console.log(a); 38 function cat (name,color) { 39 this.name=name; 40 this.color=color; 41 } 42 43 /* 44 0.方法new的瞬間,得到一個空對象{} 45 1.方法的this指向該空對象 46 2.運行方法 47 {}.name=name 48 {}.color=color 49 返回該對象 50 */ 51 var cat=new cat();//會得到一個新的對象,方法內的this指向該新對象 52 console.log(cat); 53 --------------------------------------------------------------------------------------
 1 <style>
 2   div{
 3     height: 300px;
 4     width: 300px;
 5     margin: 10px;
 6     border: 1px solid blue;
 7   }
 8 </style>
 9 <body>
10 <!--
11 *this之通過call,apply調用,call和apply會動態更改this的指向
12 -->
13 <div id="test1">test1</div>
14 <div id="test2">test2</div>
15 </body>
16 <script>
17   var test1=document.getElementById(test1)
18   var test2=document.getElementById(test2)
19   function t () {
20     this.style.background=gray;
21   }
22   t.call(test2);
23   /*
24   函數名.call(對象,參數1,參數2,參數3,...)
25   1.把函數的this,指向對象
26   2.運行函數,傳參為參數1,參數2,參數3....)
27   函數名.apply(對象,[參數1,參數2,參數3,...])
28   1.把函數的this,指向對象
29   2.運行函數,傳參為參數1,參數2,參數3....)
30   */
31 
32 </script>

技術分享圖片

 1 //課後習題:
 2   var name="The Window";
 3   var object={
 4     name:‘My Object‘,
 5     getNameFunc:function () {
 6       return function () {
 7         return this.name;
 8       }
 9     }
10   }
11   alert(object.getNameFunc()());//輸出的是The Window,為什麽呢? function () { return this.name; }相當於object.getNameFunc(),return返回的是函數函數是一個值,this.name就是全局變量的name

JS高級之this是誰?