函式的四種呼叫 模式 ==> 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...