this指向及改變this指向的方法

2022-06-28 20:51:15 字數 2583 閱讀 4056

一、函式的呼叫方式決定了 this 的指向不同,但總的原則,this指的是呼叫函式的那個物件:

1.普通函式呼叫,此時 this 指向 全域性物件window

function fn() 

fn();

此處預設省略window

2.在嚴格模式下"use strict",為undefined.

function foo()

foo();

3.物件的方法裡呼叫,this指向呼叫該方法的物件

let person =

}person.say();

4.構造函式呼叫, 此時 this 指向 new出來的例項物件

5.通過事件繫結的方法, 此時 this 指向 繫結事件的物件

"

btn">hh

6.定時器函式, 此時 this 指向 全域性物件window

二、更改this指向的三個方法

1.call() 方法

call(thisscope, arg1, arg2, arg3...)

call,可以傳入多個引數,改變this指向後立刻呼叫函式

沒錯,就像上面說的,普通函式的this指向window,現在讓我們更改this指向

看,現在this就指向person了

3.bind()方法

bind(thisscope, arg1, arg2, arg3...),bind 改變this的指向,返回的是函式

bind()建立的是乙個新的函式(稱為繫結函式),與被呼叫函式有相同的函式體,當目標函式被呼叫時this的值繫結到 bind()的第乙個引數上

三、改變this指向的例子

沒錯,就像上面所說,定時器裡的this指向window,那麼怎麼改成指向div呢

上圖就是用bind改變了this指向,但改變定時器中的this指向,我們有個更好的方法 

定義乙個_this變數來儲存this值,使全域性物件裡面的this 指向person 的this

this指向 改變this指向

常見的this指向 常見的this指向 全域性下的this指向window 函式中的this,誰呼叫指向誰 建構函式中的this指向建構函式的物件 物件中的this預設指向當前物件 事件處理函式中this誰觸發指向誰 指向觸發事件的目標元素 定時器函式,this 指向 window 箭頭函式中沒有t...

this指向 改變this指向

function a a 此處相當於window.a 這僅是我個人的理解 在這個 中我們可以看出在 的結尾是由window來呼叫的函式a,那麼這個時候this指向window,this.user,全域性中沒有user,所以先定義了,但是沒有賦值,所以列印出undefined this指向練習二 va...

this的指向及改變this指向問題

this的指向問題 1,普通函式中的this是指向window 非嚴格模式 2,普通函式中的this是指向undefined 嚴格模式 嚴格模式是es5提出的 function foo foo 3,建構函式中的this是例項物件 4,原型方法中的this是例項物件 與建構函式中的this相同 5,定...