摘要:前言先做一個小測試,如果全部答對了,恭喜你不用往下看了。它就相當于一個沒有主人調(diào)用它,無主函數(shù)。不管你用還是最終調(diào)用的都是函數(shù),但它們會強制的指向了,強制的指向了它們的第一個參數(shù)對象。
前言
第一題 第二題 第三題 第四題 答案先做一個小測試,如果全部答對了,恭喜你不用往下看了。
第一題: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ù)對象。
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://www.ezyhdfw.cn/yun/87180.html
總結call,apply,bind方法的理解使用和區(qū)別。 call,apply,bind這三個方法在JavaScript中是用來改變函數(shù)調(diào)用的this指向。那么改變函數(shù)this指向有什么用呢?我們先來看一段代碼 var a= { name:harden, fn:function () { console.log(this.name); } } var b =...
摘要:情況如果一個函數(shù)中有,這個函數(shù)有被上一級的對象所調(diào)用,那么指向的就是上一級的對象。 首先必須要說的是,this的指向在函數(shù)定義的時候是確定不了的,只有函數(shù)執(zhí)行的時候才能確定this到底指向誰,實際上this的指向的是最終調(diào)用它的對象。 函數(shù)調(diào)用模式 例子1 function a(){ var user = username; console.log(this.user)...
摘要:否則報錯在嚴格模式下,對象的函數(shù)中的指向調(diào)用函數(shù)的對象實例同樣道理,可以推斷出,在嚴格模式下,構造函數(shù)中的指向構造函數(shù)創(chuàng)建的對象實例。 要點 this的指向在函數(shù)定義的時候是確定不了的,只有函數(shù)執(zhí)行的時候才能確定this到底指向誰,實際上this的最終指向的是那個調(diào)用它的對象。 this指向的三種情況 情況1:如果一個函數(shù)中有this,但是它沒有被上一級的對象所調(diào)用,那么this指向的...
閱讀 797·2021-10-14 09:42
閱讀 2026·2021-09-22 15:04
閱讀 1668·2019-08-30 12:44
閱讀 2212·2019-08-29 13:29
閱讀 2789·2019-08-29 12:51
閱讀 605·2019-08-26 18:18
閱讀 777·2019-08-26 13:43
閱讀 2872·2019-08-26 13:38