一.根據函式內部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...