Javascript是web開發(fā)中必備的一種編程語言,而this是JavaScript中的一個重要概念,掌握好它可以幫助我們更好的理解Javascript的閉包、作用域、對象以及函數(shù)等概念。那么,本文將圍繞著javascript+this的主題,詳細介紹它的含義及其使用方法。
this是一個JavaScript的關(guān)鍵字,它指代當前函數(shù)執(zhí)行的上下文環(huán)境,也可以稱之為執(zhí)行上下文。this值的指向是在函數(shù)被調(diào)用時確定的,實際上就是函數(shù)被執(zhí)行時所在的上下文對象,通常被稱為函數(shù)的this值。換言之,它是一個指針,指向函數(shù)的調(diào)用者,可以是任何JavaScript對象。
舉例來說,我們可以定義一個函數(shù)person,而在內(nèi)部對this進行賦值,這樣就可以使用this調(diào)用person的屬性和方法:
在這個例子中,this指向person,而this.name則是對象person的屬性,我們可以通過this來操作這個屬性。同樣地,this.sex和this.age也可以通過對象來訪問,而this.sayName則是一個函數(shù),通過它我們可以調(diào)用person對象的name屬性值。
但是,只有在函數(shù)被調(diào)用的時候,this才會被賦予一個具體的值,否則它會被賦予undefined。因此,我們需要使用JavaScript中的apply、call、bind等方法來控制函數(shù)執(zhí)行時this的指向。
apply和call是一類函數(shù)方法,都可以指定調(diào)用時的上下文,從而改變函數(shù)的this指針。例如:
在上述代碼中,當我們調(diào)用showName函數(shù)時,由于沒有指定上下文對象,因此this指向的是window對象。而當我們使用call方法調(diào)用showName函數(shù)時,把p對象當做參數(shù)傳入,就將this指向了p對象,輸出了p對象的name屬性值。
bind方法同apply和call也是可以用來改變函數(shù)this指向的方法。bind會創(chuàng)建一個新的函數(shù)實例,它的this指向第一個參數(shù),返回一個新的函數(shù)。例如:
在這個例子中,我們定義了一個showName函數(shù)以及一個p對象,同時通過bind方法將showName函數(shù)和p對象綁定在了一起。當我們調(diào)用bindedFunc函數(shù)時,它的this指向p對象,于是就輸出了p對象的name屬性值。
總結(jié)起來,JavaScript中的this指針是一個指向函數(shù)執(zhí)行上下文的指針,它變量用來訪問該函數(shù)的關(guān)聯(lián)對象。通過apply、call、bind等方法,可以改變函數(shù)執(zhí)行時this指針的指向。對于新手來說,this的使用可能會不太熟練,但是只要理解了它的基本原理和實際應(yīng)用,就可以更好的掌握JavaScript編程技巧。
this是一個JavaScript的關(guān)鍵字,它指代當前函數(shù)執(zhí)行的上下文環(huán)境,也可以稱之為執(zhí)行上下文。this值的指向是在函數(shù)被調(diào)用時確定的,實際上就是函數(shù)被執(zhí)行時所在的上下文對象,通常被稱為函數(shù)的this值。換言之,它是一個指針,指向函數(shù)的調(diào)用者,可以是任何JavaScript對象。
舉例來說,我們可以定義一個函數(shù)person,而在內(nèi)部對this進行賦值,這樣就可以使用this調(diào)用person的屬性和方法:
<code> function Person(name, age, sex) { this.name = name; this.age = age; this.sex = sex; this.sayName = function() { console.log(this.name); }; } </code>
在這個例子中,this指向person,而this.name則是對象person的屬性,我們可以通過this來操作這個屬性。同樣地,this.sex和this.age也可以通過對象來訪問,而this.sayName則是一個函數(shù),通過它我們可以調(diào)用person對象的name屬性值。
但是,只有在函數(shù)被調(diào)用的時候,this才會被賦予一個具體的值,否則它會被賦予undefined。因此,我們需要使用JavaScript中的apply、call、bind等方法來控制函數(shù)執(zhí)行時this的指向。
apply和call是一類函數(shù)方法,都可以指定調(diào)用時的上下文,從而改變函數(shù)的this指針。例如:
<code> let name = "window"; <br> function showName() { console.log(this.name); } <br> let p = { name: "person" } <br> showName.apply(); // 輸出"window" showName.call(p); // 輸出"person" </code>
在上述代碼中,當我們調(diào)用showName函數(shù)時,由于沒有指定上下文對象,因此this指向的是window對象。而當我們使用call方法調(diào)用showName函數(shù)時,把p對象當做參數(shù)傳入,就將this指向了p對象,輸出了p對象的name屬性值。
bind方法同apply和call也是可以用來改變函數(shù)this指向的方法。bind會創(chuàng)建一個新的函數(shù)實例,它的this指向第一個參數(shù),返回一個新的函數(shù)。例如:
<code> let name = "window"; <br> function showName() { console.log(this.name); } <br> let p = { name: "person" } <br> let bindedFunc = showName.bind(p); bindedFunc(); // 輸出"person" </code>
在這個例子中,我們定義了一個showName函數(shù)以及一個p對象,同時通過bind方法將showName函數(shù)和p對象綁定在了一起。當我們調(diào)用bindedFunc函數(shù)時,它的this指向p對象,于是就輸出了p對象的name屬性值。
總結(jié)起來,JavaScript中的this指針是一個指向函數(shù)執(zhí)行上下文的指針,它變量用來訪問該函數(shù)的關(guān)聯(lián)對象。通過apply、call、bind等方法,可以改變函數(shù)執(zhí)行時this指針的指向。對于新手來說,this的使用可能會不太熟練,但是只要理解了它的基本原理和實際應(yīng)用,就可以更好的掌握JavaScript編程技巧。