函式內部This的指向問題
一、函式內部this的指向
this的指向是根據呼叫者來確定的,呼叫的方式不同,this的指向不同。如下所述:
1.普通函式的呼叫中,函式內部的this指向全域性的window
<script>
function fn(){
console.log(this)
}
fn()
</script>
//此處的thi指向的是window
//故呼叫該函式控制檯輸出的結果為window
2.建構函式的呼叫中,this指向的是new出來的例項化物件
<script>
function fn(name,age,sex){
this.name=username,
this.age=userage,
this.sex=sex
console.log(this)
}
var fn1 = new fn('張三',20,'男')
</script>
//輸出結果為:fn {name: "張三", age: 20, sex: "男"}
//故,建構函式中的this指向的是new出來的例項化物件
3.物件方法的呼叫中,this指向的是該方法所屬的物件
<script>
var obj = {
name: '張三',
age: 20,
sex: '男',
say: function () {
console.log(this);
}
}
obj.say()
</script>
//輸出結果為:{name: "張三", age: 20, sex: "男", say: ƒ}
//故,物件方法呼叫中的this指向的是該方法所屬的物件
4.繫結事件方法中,this指向的是繫結事件的物件
<body>
<button id="but">按鈕</button>
<script>
$('#but').on('click', function () {
console.log(this);
})
</script>
</body>
//輸出結果為:<button id="but">按鈕</button>
//故:繫結事件方法中的this指向的是繫結事件的物件
5.定時器函式中,this指向的是window
<script>
setInterval(function () {
console.log(this);
}, 3000)
</script>
//輸出的結果為:Window {window: Window, self: Window, document: document, name: "", location: Location, …}
//故,在定時器函式中this的指向是window
6.立即指向函式中,this指向的是window
(function fn(){
console.log(this)
})()
//輸出的結果為:Window {window: Window, self: Window, document: document, name: "", location: Location, …}
//故,在立即執行函式中this的指向是window
二、如何改變this的指向
1.call方法
call()的特點:
1.呼叫函式
2.改變this的指向
3.經常用做繼承
程式碼演示:
var obj = {
name: 'zhangsan'
}
function fn(a, b) {
console.log(this);
console.log(a+b)
};
fn()
//輸出結果:Window {window: Window, self: Window, document: document, name: "", location: Location, …}
// 此時的this指向的是window
fn.call(obj,1,2)
//輸出結果:{name: "zhangsan"}和3
//此時的this指向的是物件obj
2.apply方法
apply()的特點:
1.呼叫函式
2.改變this的指向
3.經常在陣列中使用
程式碼演示:
var obj = {
name: 'zhangsan'
}
function fn(a, b) {
console.log(this);
console.log(a+b)
};
fn()
//輸出結果:Window {window: Window, self: Window, document: document, name: "", location: Location, …}
// 此時的this指向的是window
fn.apply(obj,[1,2])
//輸出結果:{name: "zhangsan"}和3
//此時的this指向的是物件obj
3.bind方法
bind()的特點:
1.不呼叫函式
2.改變this的指向
3.返回一個新的陣列
4.經常在不需要呼叫函式但是需要改變this的指向時使用
var obj = {
name: 'zhangsan'
};
function fn(a, b) {
console.log(this);
console.log(a + b);
};
var fn1 = fn.bind(obj, 1, 2);
fn1()
//輸出結果:{name: "zhangsan"}和3
//此處的fn1是bind返回的新函式
//此時的this指向的是obj物件
相關文章
- 教辨別this指向問題 包括箭頭函式函式
- attachEvent()註冊事件處理函式this指向問題事件函式
- 也談箭頭函式的 this 指向問題及相關函式
- js函式中的this指向JS函式
- 指向函式的指標函式指標
- 如何在函式內部定義函式?函式
- es6學習_箭頭函式解決this指向問題函式
- setTimeout中的this指向問題和箭頭函式結合的區別函式
- C/C++——指向函式的指標和指向函式的指標的陣列C++函式指標陣列
- 箭頭函式this指向的陷阱函式
- 箭頭函式的this指向(二)函式
- javascript的this指向問題JavaScript
- 使用bind()函式的產生的函式用作建構函式this的指向函式
- Python內部函式zip使用Python函式
- JS 中的函式 this 指向總結JS函式
- 返回Promise物件的函式,函式內部記得加try catch!Promise物件函式
- js中this的指向問題JS
- 【28】避免返回handles指向物件內部成分物件
- 函式索引的問題函式索引
- oracle內部轉換函式雜談Oracle函式
- AWK高階之內部函式使用函式
- 箭頭函式this指向詳解函式
- 好程式設計師分享React-010-事件處理函式的this指向問題程式設計師React事件函式
- JavaScript中this指向問題JavaScript
- 關於javascript的this指向問題JavaScript
- JavaScript 的 this 指向問題深度解析JavaScript
- [譯] 理解JS的函式呼叫和‘this’的指向JS函式
- C/C++—— 寫一個函式,它的引數為指向函式的指標,返回型別也為指向函式的指標C++函式指標型別
- JavaScript進階教程(4)-函式內this指向解惑call(),apply(),bind()的區別JavaScript函式APP
- 函式呼叫棧的問題函式
- itoa函式的奇怪問題函式
- async、await和generator函式內部原理AI函式
- underscore 系列之內部函式 cb 和 optimizeCb函式
- 【JavaScript】徹底明白this在函式中的指向JavaScript函式
- ES6 箭頭函式下的this指向函式
- constructor 未指向建構函式Struct函式
- JavaScript內的this指向JavaScript
- JavaScript 內的 this 指向JavaScript