首先你要理解下面三句話
1.元素繫結事件,方法中的this是當前操作元素
2.方法名前面是否有點,有點,點前面是誰,this就是誰,沒有this是window(嚴格模式下是undefined)
3.建構函式執行,方法中的this是當前類的乙個例項。
下面通過不同的情況來解釋一下:
const obj=
obj.this===window //true
function fn()
function a()
const obj = new a() // this是 a{}
a() // this是 'window'
new出來的物件,this指向了即將new出來的物件。
當做普通函式執行,this指向window。
const obj =
} obj.foo() // obj
const a = obj.foo
a() //window
作為物件方法,this指向了這個物件。(新物件繫結到函式呼叫的this)
一旦有變數直接指向了這個方法,this為window.
如果在方法裡面執行函式,this指向window.
const obj =
foo1()
}} obj.foo()
function fn()
fn.prototype.fn = function ()
const obj = new fn()
obj.fn()
原型定義方法的this指向了例項物件。畢竟是通過物件呼叫的。
const obj =
function fn()
fn.call(obj) //obj
fn.bind(obj)() //obj
this指向傳入的物件。
obj =
b()}
} obj.c()
在方法中定義函式應該是指向window,但是箭頭函式沒有自己的this,所以指向上一層作用域中的this.
obj.prop.fullname //沒有undefined this就是window
9.2 window
9.3 0 30
this => myfun =>myfun.a =>0
this => myfun =>myfun.a =>30 設定私有屬性的值
9.4 fn object undefined 20 報錯 20 nan
9.4解析看下圖
9.5 4 2 1
this指向問題
一 this的指向在函式定義的時候是確定不了的,只有函式執行的時候才能確定this到底指向誰,實際上this的最終指向的是那個呼叫它的物件 例項一 函式this指向 function a a undefined windowwindow.a undefined window 解釋 這裡的a函式指向的...
this指向問題
在普通的函式中this指向window 在定時器中指向window,其實普通的函式和定時器都是window下的方法,所以都指向window 在乙個物件中的方法中this批向當前物件 new了 綁事件是事件源 真正觸發的 function fn a,b var aa fn.call 普通模式下this...
this指向問題
但是有時候這樣的判斷並不準確,可以按照如下規則進行判斷。瀏覽器環境 無論是否在嚴格模式下,在全域性執行環境中 在任何函式體外部 this 都指向全域性物件window node 環境 無論是否在嚴格模式下,在全域性執行環境中 在任何函式體外部 this 都是空物件 如果是new繫結並且 建構函式返回...