js高階之三 this指向

2021-09-02 22:44:25 字數 1610 閱讀 6079

本文不考慮嚴格模式(錯誤之處感謝提出,請勿噴)

function 函式 this 指向一共有4種規則:預設繫結,隱式繫結,顯式繫結, new繫結

預設繫結

function fn() 

var a = 1;

fn(); // a: 1

fn在沒有任何修飾的被呼叫,只能使用預設繫結;this指向了直接呼叫的window

隱式繫結

function fn() 

var a = 1;

var obj =

obj.fn1(); // a: 5

函式fn有了上下文的物件,隱式繫結規則會把函式呼叫中的 this 繫結到這個上下文物件上邊;fn 的 this 指向到obj上邊

個人理解:不管是預設還是隱式繫結,函式的this指向直接呼叫者

注意乙個問題:

function fn() 

var obj =

var a = 0;

var b = obj.fn1;

b(); // a: 0

// b 引用的是 fn函式本身,此時丟掉了繫結的物件,即 b() 的直接呼叫者是window,因此 this 指向全域性物件

顯式繫結

顯示繫結一共3種方式(自己統計,對錯不知道): bind call aplly

function fn() 

var a = 1;

var obj =

obj.fn1(); // a: 1

函式 fn 預設應該繫結到obj上邊,但是bind 函式會返回乙個硬編碼的函式,指向你傳進去的上下文;所以這個this指向了window

function fn() 

var a = 1;

var obj =

obj.fn1(); // a: 1

new 關鍵字繫結

使用 new 來呼叫 fn()時,我們會構造乙個全新的物件並把它繫結到 fn()呼叫中的this 上,即把 bar 繫結到 fn 的 this 上

4中繫結的優先順序: 預設繫結《隱式繫結《顯式繫結ps: es6新增的箭頭不是function 函式,所以不在這個約束之內;箭頭函式的this指向永遠指向直接呼叫者的this,無法被更改。

JS高階之 this的指向

this到底指向什麼地方,決定於函式的呼叫方式。1 指向全域性變數 函式被單獨呼叫的時候 function fn var a 2 fn 2 fn單獨呼叫,this引用window 2 指向某物件 隱式繫結 隱式呼叫的意思是,函式呼叫時擁有乙個上下文物件 function fn var obj obj...

js 深入原型之三繼承

1 通過改變原型指向來實現繼承 缺陷 實現繼承的同時直接初始化了屬性,繼承過來的屬性的都是一樣的 解決 繼承的時候不用改變原型的指向,直接使用借用建構函式 call方法 function person name,age,weight person.prototype.sayhi function 借...

Spring實戰之三 高階裝配

primary和 component組合使用,宣告該bean在自動掃瞄時為首選bean,在遇到歧義時首先使用首選bean autowired inject 和 qualifier配合使用,在注入時指定要注入進去的是哪個bean,如 qualifier icecream 表明注入id 確切地講是限定符...