函式的四種呼叫模式及this指向

2021-09-11 05:52:46 字數 1877 閱讀 5633

一.根據函式內部this的指向不同,可以將函式的呼叫模式分成4種

函式呼叫模式

方法呼叫模式

構造函式呼叫模式

上下文呼叫模式(借用方法模式)

首先先來分析this指向問題

1.任何函式都有屬於自己的this

2.this的指向和函式的呼叫模式相關,意味著this的指向在函式宣告的時候確定不了.

然後分析this指向的思路:

1.this是屬於哪個函式的

2.這個函式的呼叫模式是哪種

接下來,看一下四種呼叫模式

函式呼叫模式

如果乙個函式不是乙個物件的屬性時,就是被當做乙個函式來進行呼叫的。此時this指向了window

function fn()

fn();

方法呼叫模式

當乙個函式被儲存為物件的乙個屬性時,我們稱之為乙個方法。當乙個方法被呼叫時,this被繫結到當前物件

var obj = 

}obj.sayhi();//this =>obj

物件.方法名()

obj.fn();

obj.fn2();

obj['fn'] ;

// 總結: .語法、中括號語法,都是屬於 方法呼叫模式

構造函式呼叫模式

如果函式是通過new關鍵字進行呼叫的,此時this被繫結到建立出來的新物件上。

function person()

person();//this指向window

var p = new person();//this指向person

上下文呼叫模式

call方法

call方法可以呼叫乙個函式,並且可以指定這個函式的this指向

//所有的函式都可以使用call進行呼叫

//引數1:指定函式的this,如果不傳,則this指向window

//其餘引數:和函式的引數列表一模一樣。

//說白了,call方法也可以和()一樣,進行函式呼叫,call方法的第乙個引數可以指定函式內部的this指向。

fn.call(thisarg, arg1, arg2, arg3);

借用物件的方法

偽陣列與陣列

偽陣列也叫類陣列

偽陣列其實就是乙個物件,但是跟陣列一樣,偽陣列也會有length屬性,也有0,1,2,3等屬性。

偽陣列並沒有陣列的方法,不能使用push/pop等方法

偽陣列可以跟陣列一樣進行遍歷,通過下標操作。

常見的偽陣列:arguments、document.getelementsbytagname的返回值、jquery物件

var arraylike = 

//偽陣列可以和陣列一樣進行遍歷

array.prototype.push.call(arrlike, "ls");

array.prototype.join.call(arrlike, "-");

小知識點:console.log中的log方法內不需要修改this的指向

bind方法

bind()方法建立乙個新的函式, 可以繫結新的函式的this指向

// 返回值:新的函式

// 引數:新函式的this指向,當繫結了新函式的this指向後,無論使用何種呼叫模式,this都不會改變。

var newfn = fn.bind(window);

幾種特殊的this指向

函式的四種呼叫模式

總結筆記,參考文件 1 函式模式 最普通的函式呼叫 1 宣告式函式 2function fn1 5 函式表示式函式 6var fn2 function 9 呼叫 函式中this表示全域性物件,在瀏覽器中就是指window 10 fn1 window 11 fn2 window 2 方法模式 函式依附...

函式的四種呼叫模式

函式的四種呼叫模式 1 函式模式 特徵就是乙個簡單的函式呼叫,函式名前面沒有任何的引導內容 this含義 this在函式模式中表示全域性物件,在瀏覽器中是windjow物件 2 方法模式 特徵方法一定是依附與乙個物件,將函式賦值給物件的乙個屬性,那麼就成為了方法 this含義 this在方法模式呼叫...

函式四種呼叫模式以及this指向

第一種 函式執行模式 function add a,b add this window true第二種 物件方法的呼叫模式 function cat var c new cat c.show 物件呼叫自己的方法 this c 呼叫事件響應的方法都是,物件方法呼叫模式第三種 構造器的呼叫 functi...