Js中this的指向問題

2021-10-03 13:10:42 字數 1717 閱讀 4762

函式的四種呼叫 模式 ==> this的指向

// this的指向  是靈活的  每乙個函式   都有自己的this  指向

// this的指向和函式的呼叫模式相關

// 1.this的指向只有 在函式呼叫的時候才能確定下來

// 宣告函式 並不能確定函式的this指向

// 2.this的指向 和函式在哪呼叫 沒有關係

// this 如何去分析

// 1.分析的this屬於哪個函式

// 2.這個函式的呼叫模式是哪一種

1.函式呼叫模式:函式名()

this指向window

functionfn(

)fn()

//this指向的是window

2.方法呼叫模式: 物件.方法()

this指向呼叫方法的物件

// 方法內的this  指向了呼叫方法的物件

var obj =

} obj.fn(

)//obj

obj[

"fn"](

)//obj

// 看見點語法 中括號語法 就是屬於方法呼叫模式

建構函式模式

this指向的是例項物件

// new()建構函式,建構函式內的this  指向了例項物件

function

person()

var p =

newperson

()

方法借用模式

// 1.call

// 除了使用小括號 來呼叫函式 call也可以用來呼叫函式

functionfn(

)fn()

;//1

fn.call()

;//1

// call除了呼叫函式 還可以改變函式內this的指向

// call方法 第乙個引數 可以改變 this 的指向

// 後面的引數 是呼叫函式的實參

function

fn(a,b,c)

fn.call(,

2,4,

8)// 14

// 第乙個引數也是改變this的指向

// 第二個引數 是乙個陣列 或者偽陣列 裡面存放的是 實參列表

fn.(,

[2,4

,8])

// 14

// 引數 較少的時候用call(),比較簡潔

// 3.bind

// 語法 var newfn = fn.bind(arg)

// 作用 建立 並返回了乙個新的函式 函式和原來的函式一樣

// 但是this指向不一樣 新的函式 this指向arg

functionhe(

)he()

//window

var newhe = he.

bind

("hello"

)// hello

//這裡this就指向字串hello

newhe()

JS中this指向問題

解析器在呼叫函式時,每次都會向函式內部傳遞進乙個隱含的引數,這個隱含的引數就是this,this指向的是乙個物件,這個物件我們稱之為函式執行的上下文物件,根據函式的呼叫方式不同,this會指向不同的物件.簡單來說一下函式中this指向問題,1.this是什麼?任何函式本質上都是通過某個物件來呼叫的,...

JS中this指向問題

函式內部的this之和函式的呼叫方式有關,和函式的定義方式沒有關係functionfn fn windowvar obj obj.fn obj functionfn 或者可以這樣寫自呼叫函式 functionfn div document.queryselector div div.onclick ...

JS中this指向問題

與其它語言相比,js的this關鍵字的指向稍微有點差別。一 全域性環境 首選我們要明確一點,在全域性環境中 在任意函式體外部 無論是嚴格模式還是非嚴格模式,this都指向window。下面,我們來通過幾個例子理解一下。示例1 console.log this 這裡的this在全域性域下,指向wind...