JavaScript this關(guān)鍵字指向常用情況解析
在之前寫代碼的經(jīng)歷中,常常試過寫著寫著this就莫名其妙的不知道指向到哪里去了。今天看了曾探的javascript設(shè)計(jì)模式,里面特別談到了this在不同情況下指代的對(duì)象,非常有意思。
this指代的情況
this有以下4種情況:
1、對(duì)象.函數(shù)的形式調(diào)用:object.function();
2、普通函數(shù)的形式調(diào)用:function();
3、構(gòu)造器調(diào)用;
4、Function.prototype.call或Function.prototype.apply調(diào)用;
1、對(duì)象.函數(shù)的形式調(diào)用
對(duì)象.函數(shù)方式調(diào)用時(shí),指代該對(duì)象。
var obj = { num:1, getNum:function(){ alert(this.num);//輸出1 }}obj.getNum();
2、普通函數(shù)形式調(diào)用
普通函數(shù)的方式被調(diào)用時(shí),this指向全局對(duì)象。
window.num = 2;var obj = { num:1, getNum:function(){ alert(this.num); }}obj.getNum();//彈出1var fun1 = obj.getNum;fun1(); //彈出2
太神奇了,直接調(diào)用函數(shù) fun(); 與通過對(duì)象調(diào)用函數(shù) xxx.fun(); this指代的對(duì)象不同。
3、構(gòu)造器調(diào)用
為了能夠用上new關(guān)鍵字,javascript的創(chuàng)建對(duì)象可以這樣定義。
var person = function(){this.name = ’劉備’;}
在這種情況下,this指代這個(gè)正在創(chuàng)建中的對(duì)象。
var p = new person();alert(p.name);//彈出劉備
4、Function.prototype.call或Function.prototype.apply調(diào)用
var obj1 = { name:’關(guān)羽’, getName:function(){ return this.name; }}var obj2 = { name:’劉備’}alert(obj1.getName()); //關(guān)羽alert(obj1.getName.call(obj2)); //劉備
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. ASP常用日期格式化函數(shù) FormatDate()2. ASP.NET Core實(shí)現(xiàn)中間件的幾種方式3. PHP設(shè)計(jì)模式中工廠模式深入詳解4. ASP中實(shí)現(xiàn)字符部位類似.NET里String對(duì)象的PadLeft和PadRight函數(shù)5. XML入門的常見問題(二)6. 如何在jsp界面中插入圖片7. 在JSP中使用formatNumber控制要顯示的小數(shù)位數(shù)方法8. 利用CSS3新特性創(chuàng)建透明邊框三角9. 將properties文件的配置設(shè)置為整個(gè)Web應(yīng)用的全局變量實(shí)現(xiàn)方法10. jsp實(shí)現(xiàn)textarea中的文字保存換行空格存到數(shù)據(jù)庫的方法
