這篇文章主要介紹了Javascript中this關鍵字指向問題的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
我們提供的服務有:網(wǎng)站制作、成都網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、尼河口ssl等。為上千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術(shù)的尼河口網(wǎng)站制作公司
測試題目
第一題
第二題
第三題
第四題
答案
第一題:zhangsan wangwu zhangsan
第二題:zhangsan zhangsan
第三題:我叫zhangsan 我叫zhangsan
第四題:zhangsan zhangsan zhangsan lisi wangwu
(往下看,下面有詳細解析哦)
this
指向調(diào)用函數(shù)的對象
無對象調(diào)用函數(shù)/匿名函數(shù)自調(diào)用(this指向window)
通過new產(chǎn)生的對象
apply/call調(diào)用
一、指向調(diào)用函數(shù)的對象
全局函數(shù)(demo)屬于window對象的方法,window調(diào)用demo所以this就指向了window
obj調(diào)用say方法,this就指向了obj
fun()是全局函數(shù),而聲明的fun接收的是obj里面單純的一個函數(shù),并沒有調(diào)用(obj.say()才是調(diào)用了函數(shù)),此時的fun就是一個函數(shù)(function(){alert(this.str);}),那么當fun()調(diào)用函數(shù)的時候,this指向的就是window
是誰調(diào)用的函數(shù),那么this就指向誰
二、無對象調(diào)用函數(shù)/匿名函數(shù)自調(diào)用->this指向window
因為匿名函數(shù)沒有名字,所以就掛給window了
test(),誰調(diào)用test那么就指向誰。當然實驗過,它不是window調(diào)用的,也不是demo調(diào)用的,沒有人管它,那么它就指向window。它就相當于一個沒有主人調(diào)用它,無主函數(shù)。
三、通過new產(chǎn)生的對象
當我們的函數(shù)Person里面運用了this去寫屬性和方法這種格式,那么就要通過new來讓屬性和方法變得有價值,通過new去運用函數(shù)里面的屬性和方法
四、apply/call調(diào)用
首先我們來了解下apply()/call()是個什么東西呢?
apply()/call():最終是調(diào)用function,只不過內(nèi)部的this指向了thisObj
function.call([thisObj[,arg1[, arg2[, [,.argN]]]]]) function.apply([thisObj[,argArray]])
注意:
1. 調(diào)用function函數(shù),但是函數(shù)內(nèi)的this指向thisObj(更改對象內(nèi)部指針)
2. 如果thisObj沒有傳參,則默認為全局對象
3. call()/apply()聯(lián)系與區(qū)別
聯(lián)系:功能一樣,第一個參數(shù)都是thisObj
區(qū)別:傳遞的參數(shù)如果比較多
call()的實參就是一一列出
apply()的實參是全部放置在第二個數(shù)組參數(shù)中
一個理解apply()/call()的實例:
this的第四個用法實例
如果直接調(diào)用demo里面寫的不管是obj1還是obj2,那么demo還是屬于window調(diào)用的。
不管你用call還是apply最終調(diào)用的都是demo函數(shù),但它們會強制的this指向了obj1/obj2,強制的指向了它們的第一個參數(shù)對象。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“Javascript中this關鍵字指向問題的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關知識等著你來學習!