摘要:方法調(diào)用當(dāng)一個(gè)函數(shù)作為一個(gè)對(duì)象的屬性調(diào)用時(shí)候下標(biāo)表達(dá)式或者點(diǎn)表達(dá)式稱之為方法調(diào)用,此時(shí)指向這個(gè)對(duì)象。作為構(gòu)造函數(shù)調(diào)用的方式稱為的構(gòu)造函數(shù),的過程中構(gòu)造函數(shù)的對(duì)象的屬性和方法將被加到新對(duì)象的屬性上。
this
this是js的一個(gè)關(guān)鍵字,只能在函數(shù)內(nèi)部使用,在函數(shù)運(yùn)行時(shí)候自動(dòng)生成的內(nèi)部對(duì)象,代表函數(shù)運(yùn)行時(shí)候的作用域指向,使用頻率極高!
常用的用法與作用域指向
函數(shù)調(diào)用:js里面規(guī)定當(dāng)一個(gè)函數(shù)并非某一個(gè)對(duì)象,直接調(diào)用的時(shí)候,稱之為函數(shù)調(diào)用,此時(shí)this指向全局對(duì)象Global。
var t = 1; function test(){ console.log(this.t) } test() //1
方法調(diào)用:當(dāng)一個(gè)函數(shù)作為一個(gè)對(duì)象的屬性調(diào)用時(shí)候([fn]下標(biāo)表達(dá)式或者.fn點(diǎn)表達(dá)式)稱之為方法調(diào)用,此時(shí)this指向這個(gè)對(duì)象。
var t =1; var obj= { t:2, test :function(){ console.log(this.t) } } obj.test() // 2
作為構(gòu)造函數(shù)調(diào)用:var test = new fn() 的方式 稱fn為test的構(gòu)造函數(shù),new的過程中構(gòu)造函數(shù)的this對(duì)象的屬性和方法將被加到新對(duì)象的屬性上。
function fn(){ this.t = 1 } var test = new fn(); test.t // 1 //fn的this對(duì)象會(huì)被加到新生成的test對(duì)象上
4:apply,call,bind方式調(diào)用:apply,call,bind都可以改變一個(gè)函數(shù)運(yùn)行時(shí)候的this指向。
var t = 1 var test = function(){ console.log(this.t) } test() //1 test.call({t:2}) //2 test.apply({t:3})//3 test.bind({t:4})()//4
關(guān)于bind的分析,可以看另一篇文章:bind方法分析與實(shí)現(xiàn)
看完了上面4種調(diào)用方式可以得出一個(gè)結(jié)論:this指向的作用域永遠(yuǎn)是函數(shù)運(yùn)行時(shí)候決定的。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/80850.html
摘要:復(fù)習(xí)基礎(chǔ)到底是什么的應(yīng)用場(chǎng)合極其廣泛。常量不可以通過重新賦值改變其值,也不可以在代碼運(yùn)行時(shí)重新聲明。布爾對(duì)象是原始布爾數(shù)據(jù)類型的一個(gè)包裝器整數(shù)整數(shù)可以用十進(jìn)制基數(shù)為十六進(jìn)制基數(shù)為八進(jìn)制基數(shù)為以及二進(jìn)制基數(shù)為表示。 復(fù)習(xí)js day1 js基礎(chǔ) JavaScript 到底是什么 JavaScript 的應(yīng)用場(chǎng)合極其廣泛。簡(jiǎn)單到幻燈片、照片庫、浮動(dòng)布局和響應(yīng)按鈕點(diǎn)擊。復(fù)雜到游戲、2D 和 ...
摘要:構(gòu)造函數(shù)通常首字母大寫,用于區(qū)分普通函數(shù)。這種關(guān)系常被稱為原型鏈,它解釋了為何一個(gè)對(duì)象會(huì)擁有定義在其他對(duì)象中的屬性和方法。中所有的對(duì)象,都有一個(gè)屬性,指向?qū)嵗龑?duì)象的構(gòu)造函數(shù)原型由于是個(gè)非標(biāo)準(zhǔn)屬性,因此只有和兩個(gè)瀏覽器支持,標(biāo)準(zhǔn)方法是。 從這篇文章開始,復(fù)習(xí) MDN 中級(jí)教程 的內(nèi)容了,在初級(jí)教程中,我和大家分享了一些比較簡(jiǎn)單基礎(chǔ)的知識(shí)點(diǎn),并放在我的 【Cute-JavaScript】系...
摘要:綁定函數(shù)被調(diào)用時(shí),也接受預(yù)設(shè)的參數(shù)提供給原函數(shù)。一個(gè)綁定函數(shù)也能使用操作符創(chuàng)建對(duì)象這種行為就像把原函數(shù)當(dāng)成構(gòu)造器。 一直很難理解js中的call apply bind,在w3schools,mdn閱讀了,也看了很多相關(guān)的文章,今天我來寫下我理解的call apply bind 首先創(chuàng)建一個(gè)函數(shù) function man(){} man.prototype = { name: ...
摘要:為了更好的講解構(gòu)造函數(shù)原型原型鏈等,我們需要復(fù)習(xí)一下函數(shù)的一些基礎(chǔ)知識(shí)。閉包在復(fù)習(xí)了函數(shù)的相關(guān)基礎(chǔ)知識(shí)之后,我們終于可以進(jìn)入閉包。我們可以這樣理解閉包,首先,閉包是一個(gè)函數(shù),是一個(gè)什么樣子的函數(shù)呢是一個(gè)可以訪問另一個(gè)函數(shù)中變量的函數(shù)。 為了更好的講解構(gòu)造函數(shù)、原型、原型鏈等,我們需要復(fù)習(xí)一下函數(shù)的一些基礎(chǔ)知識(shí)。接下來,就讓我們一起回味一些JS的基礎(chǔ)知識(shí)點(diǎn)。 全局變量VS局部變量 簡(jiǎn)單粗...
摘要:在創(chuàng)建子類實(shí)例時(shí),不能向超類型的構(gòu)造函數(shù)中傳遞參數(shù)。構(gòu)造函數(shù)繼承子類傳進(jìn)的值是基本思想是在子類構(gòu)造函數(shù)的內(nèi)部調(diào)用超類或父類型構(gòu)造函數(shù)。繼承保證構(gòu)造函數(shù)指針指向如果想同時(shí)繼承多個(gè),還可使用添加屬性的方式類繼承, OOP:Object Oriented Programming 面向?qū)ο缶幊獭?題外話:面向?qū)ο蟮姆秶鷮?shí)在太大,先把這些大的東西理解理解。 1.什么是對(duì)象? 根據(jù)高程和權(quán)威指南上...
閱讀 3310·2021-09-02 15:41
閱讀 2840·2021-09-02 09:48
閱讀 1381·2019-08-29 13:27
閱讀 1170·2019-08-26 13:37
閱讀 846·2019-08-26 11:56
閱讀 2490·2019-08-26 10:24
閱讀 1651·2019-08-23 18:07
閱讀 2626·2019-08-23 15:16