您好,登錄后才能下訂單哦!
小編給大家分享一下JavaScript中this指向的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
先看代碼:
function test(){ console.log(this); }
Person={ name:"張三", eat:function(){ console.log(this) } }
在方法中,this表示該方法所屬的對象。因為第一個是window上的方法,所以打印了window,而eat方法是Person方法,所以打印除了對象Person。
所以可以看出單獨在控制臺使用this, 表示全局對象。
在對象,可以提前聲明一個一個:
var Person1={ name:"張三", age:18 } var Person2={ name:"李四", age:19 }
這樣寫會很麻煩,所以可以借鑒一下java類的概念,可以這樣:
var Person=function(name,age){ this.name=name, this.age=age } var Person1=new Person("張三",18); var Person2=new Person("李四",19);
其實在new的時候隱藏了一個return this,如果不使用new的話,發現其沒有返回這個新建的對象。
那么現在補全一下看:
var Person=function(name,age){ this.name=name, this.age=age return this; } var Person1=new Person("張三",18); var Person2=new Person("李四",19);
這樣的話,甚至可以偽造一個this的效果:
var Person=function(name,age){ var that={}; that.name=name, that.age=age return that; } var Person1=new Person("張三",18); var Person2=new Person("李四",19);
this在嚴格模式和非嚴格模式下有些神奇的情況
function test() { return this; } # 如果js前面添加"use strict" 代表是嚴格模式 "use strict"; function test() { return this; }
這個可以看出在非嚴格模式下函數中,函數的所屬者默認綁定到 this 上。所以可以打印出全局,但是嚴格模式下函數是沒有綁定到 this 上,這時候 this 是 undefined。
先看代碼
var Person=function(name,age){ this.name=name, this.age=age, this.fun=function(){ console.log("打印",this.name); } } var Person1=new Person("張三",18); var Person2=new Person("李四",19);
可以看出this指向的window中的a的值而不是方法test中的值,但是有些關鍵字是可以修改指向的。
可以看出方法前的對象是誰,調用的this就是誰,但是可以修改的比如使用關鍵字 call ,apply ,bind
看上面的話,可以看出call和apply兩個很像,而bind不會立即執行函數,需要帶()執行。
不過如果帶上參數的話,會發現call和apply還是不同的,但是其里面都必須是對象才行,畢竟this這個指向就是對象
關鍵字 | 直接調用方法 | 參數 |
---|---|---|
call | 會自動運行使用的方法 | 都可以帶參數格式如下:obj1.obj1Fun.call( obj2, 參數1, 參數1 ………………); |
apply | 會自動運行使用的方法 | 都可以帶參數格式如下:obj1.obj1Fun.apply( [ obj2, 參數1, 參數1 ………………]); 對比call的參數其參數用 [ ] 包住 |
bind | 不會自動運行使用的方法,需要后面+(),進行調用 | 都可以帶參數格式如下:都可以帶參數格式如下:obj1.obj1Fun.bind( [ obj2, 參數1, 參數1 ………………])(); 對比apply的參數是一樣的,只不過其需要后面+()才能調用 |
以上是“JavaScript中this指向的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。