this簡單認識

2021-08-21 20:10:25 字數 1985 閱讀 1485

this:在函式中簡單的說,this的指向存在於函式呼叫的時候決定的,誰呼叫了這函式 函式中的this就指向誰

例如:1、普通的呼叫函式的時候

fn() ---->   window
2、物件呼叫

var obj = {}

obj.f = fn;

obj.f()

this ----> obj

3、定時器呼叫:因為fn不是我們自己手寫**呼叫的 底層是window 呼叫了這個方法

setinterval( fn , 1000)

fn()

this ----> window

4、註冊事件:事件處理函式呼叫的時候 底層瀏覽器找了box 然後瀏覽讓box.onclick() 事件觸發

box.onclick = fn;

this ------> box

注意:es6中箭頭函式中是沒有this指向問題的,因此箭頭函式的中的this從哪來的呢?它值取決於它本身外面的不是乙個箭頭函式的函式的this

在建構函式中如果去new了乙個例項,那麼new操作符也是會建立乙個this的

改變this指向的方法:

通過上下文呼叫模式,通過上下文呼叫的模式,我們可以讓this指向誰就指向誰

1、call() 

作用:1.會呼叫這個函式

2.第乙個引數傳入誰 那麼函式中的this就指向誰

引數:第乙個引數:context(上下文),傳入誰,函式中的this就指向誰

第二個引數:傳入的實參 按照函式的形參順序傳值

語法:函式.call(context , 實參);           

例如:

function person(name, age)

var obj = ;

person.call(obj, 'zs', 18);

console.log(obj);

作用:1、呼叫這個函式

2、第乙個引數傳入誰 函式中的this就指向誰

引數:第乙個引數:context 傳入誰 函式中的this就指向誰

第二個引數:要求傳入乙個陣列  陣列中存放實參

例如:

function person(name, age)

var obj = ;

console.log(obj);

3、bind()

作用:1、轉殖這個函式,然後將轉殖的函式進行返回出去

2、讓這個新轉殖的函式中的this有一定的固定的指向

引數:第乙個引數:context 傳入誰新轉殖出來的函式裡面的this就指向誰

第二個引數:按照形參賦值

語法:var 新的函式  = 函式.bind( obj )

例如:

var obj = 

function person(name, age)

var newfn = person.bind(obj, 'zl', 47);

newfn();

console.log(obj);

總結:

三個改變this指向方法的相同點:

第乙個引數context 傳入誰 函式中的this就指向誰

不同點:

注意:

function fn()

fn.bind(['a'])();

var newfn = fn.bind(['a']);

var f = new newfn();

雖然bind之後函式被轉殖了this的指向也發生了變化被固定了下來,但是注意new 比較強大,在使用new了之後 new還是會讓函式裡面的this的指向新的物件;

順便回想:

new操作符做了哪些事情?

1、建立乙個新的物件

2、讓這個this指向新的物件

3、執行建構函式

4、返回這個新的物件

TCP IP簡單認識

tcp ip是乙個四層協議系統。每一層都有多個不同協議構成。所謂協議就是定義好的,在不同網路,不同 系統中都相同的規定。這樣保障了不同網路系統的可通訊基礎。四層協議包括 鏈路層,網路層,運輸層 和應用層。每乙個層面分管不同的資料,層層打包。總的來說我們可以接觸到的也就是應用層和運輸層。應用層我們自己...

MVC簡單認識

學習乙個新知識,首先要了解的就是下面幾個問題,它是什麼?它能幹什麼?使用它有什麼好處?這篇文章就圍繞這幾個問題來展開討論。mvc不是一種程式語言,嚴格來說,它都不算是一門技術,它是開發軟體時使用的一種 架構 框架 他就像是一種開發模式,或者是乙個程式設計模板。軟體開發人員老生常談的乙個問題,就是軟體...

簡單認識Yum

眾所周知,redhat和fedora的軟體安裝命令是rpm,但是用rpm安裝軟體最大的麻煩就是需要手動尋找安裝該軟體所需要的一系列依賴關係,超級麻煩不說,要是軟體不用了需要解除安裝的話由於解除安裝掉了某個依賴關係而導致其他的軟體不能用是非常惱人的。令人高興的是,fedora終於推出了類似於 ubun...