THIS的五種情況

2021-10-04 05:29:26 字數 2070 閱讀 1910

1.this1給元素的某個事件繫結方法,事件觸發,方法執行,此時方法中this都是當前元素本身

=

>dom0

btn.onclick = function anonymous()

;=>dom2

btn.

addeventlistener

('click'

, function anonymous()

,false);

btn.

attachevent

('onclick'

,function anonymous()

);

2.this2普通函式執行,它裡面的this是誰,取決於方法執行前面是否有「點」,有的話,「點」前面是誰this就是誰,沒有this指向window
var a =10;

var obj=

}obj.fn(

);=>

20 obj.fn.

call()

;=>window 10

(obj.fn)()

;=>

20(obj.fn,obj.fn)()

;new

obj.fn()

; obt.

hasownproperty

('name'

) console.

log(obj.

hasownproperty

('name'))

;//=>hasownproperty方法中的this:obj true

console.

log(obj.__proto__.

hasownproperty

('name'))

;//=>hasownproperty方法中的this:obj.__proto__(object.prototype) false

console.

log(object.prototype.hasownproperty.

call

(obj,

'name'))

;//<=> obj.hasownproperty('name')

3.this3建構函式執行(new ***),函式中的this是當前類的例項
function fn()

let f =

newfn;=

> 指向f fn

()的原型

4.this4箭頭函式沒有this,所有到的this
1.他沒有prototype(也就是沒有構造器),所以不能被new執行

2.沒有arguments實參集合,可以基於...args剩餘運算子獲取

let obj =;}

};let ff = obj.fn(

);ff(

);

let obj =;}

};let ff = obj.fn(

);//=>fn()前面有. 所以this是objff(

);=> window //ff()前面啥也沒有所以是window

如果想要returnreturn function() ;中的this和外面的this一樣,可以:

1.建立乙個變數:

let obj =;}

};let ff = obj.fn(

);ff(

);2.換箭頭函式

let obj =;}

};let ff = obj.fn(

);ff(

);

定時器的特殊情況

let obj =

,1000);

//settimeout(function(), 1000);}}

;obj.fn(

);

* 第乙個引數就是改變的this指向,寫誰就是誰(特殊:非嚴格模式下,傳遞null/undefined指向的也是window)

* func.call([context],10,20)

* bind

JS中THIS的五種情況

一 事件繫結 this1 給元素的某個事件行為繫結方法,事件觸發,方法執行,此時方法中的this一般都是當前元素本身 在 中,有乙個button 點我一下 二 普通函式執行 this2 普通函式執行,它裡面的this是誰,取決於方法執行前面是否有 點,有的話,點 前面是誰this就是誰,沒有this...

五種情況會導致Session 丟失

1 session到期自定丟失。2 當修改web.config 系統會重啟 session 會丟失.3 bin目錄有變化時候系統會重啟 session會丟失 這裡變化指的是,建立新檔案 修改檔名 修改檔案內容 刪除檔案 修改目錄名 刪除目錄 唯獨建立新目錄時候部系統不會重啟,4 整個應用程式目錄都被...

工作或學習中經常遇到的五種阻塞情況

工作或學習中經常遇到的五種阻塞情況 1 提交執行時間長的查詢。長時間執行的查詢會阻塞其它查詢。例如,影響很多行的 delete 或 update 操作能獲取很多鎖,這些鎖不論是否公升級到表鎖都阻塞其它查詢。因此,一般不要將長時間執行的決策支援查詢和聯機事務處理 oltp 查詢混在一起。解決方案是想辦...