函式的四種呼叫方式以及this指向

2021-09-10 17:31:02 字數 1456 閱讀 7378

在es6之前,我們要看乙個函式內部的this到底是指向誰,那麼就要通過觀察函式是如何呼叫的,下面是函式的四種呼叫方式:

函式呼叫

示例1:

var age=18;

var p=

}var s1=p.say

s1()

;//函式呼叫

由示例1可以知道函式呼叫方式的時候this是指向window。

方法呼叫

示例2:

var age=18;

var p=

} p.

say(

)//方法呼叫

示例2就是方法呼叫的例項,也就是物件呼叫了他自身的方法。最後,可以知道say函式裡面的this指向是p物件。

建構函式的呼叫

示例3:

var age=18;

var p=

}new

p.say()

//構造函式呼叫

//相當於:

var s1=p.say;

news1()

;

示例3剖析:首先知道p是乙個物件,他裡面有say方法,那麼此時有乙個new關鍵字後面有乙個函式呼叫,那麼也就是說通過了new來呼叫乙個函式,此時這個函式就可以說是建構函式咯!那麼這個函式呼叫的方式就叫做構造函式呼叫咯!那麼問題來了,此時函式內部的this是指向誰呢?示例3中的say函式內部的this是指向誰呢?輸出列印結果可以知道this.age值為undefined,也就是並沒有找到age的值。因為使用這個呼叫方式的函式內部的this就是該建構函式的例項。可是該建構函式的例項上並沒有找到age屬性,所以輸出結果就是undefined。

上下文呼叫

例項4:

functionf1(

)//call方法的第乙個引數決定了函式內部的this的值

f1.call([

1,3,

5]) f1.

call()

f1.call(1

)

f1.call

("abc"

) f1.

call

(true);

f1.call

(null

) f1.

call

(undefined)

;

//bind基本用法

function

speed()

//執行了bind方法之後,產生了乙個新函式,這個新函式裡面的邏輯和原來還是一樣的,唯一的不同是this指向

var speedbind = speed.

bind()

;speedbind()

;//100

(function

eat())

.bind()

()//360

函式的四種呼叫方式

函式作為物件的屬性時,稱為方法。此時函式 即方法 中的this對應是該物件。var myobject 方法呼叫模式,this對應的是myobject物件 myobject.func 3 也可以寫成如下格式 var myobject myobject.func function 方法呼叫模式 myob...

js種函式呼叫的四種方式

函式呼叫 this指向 window 返回值 由return值決定,如果沒有return語句就表示沒有返回值 案例1 function f1 f1 window 案例2 function f2 var f2n f2 f2n this window 這也是一次函式呼叫模式 案例3 functioon ...

js函式的四種呼叫方式以及對應的this指向

一 函式呼叫,此時this是全域性的也就是window 1 var c function 4 c true 二 方法呼叫 var myobj myobject.inc 1 結果3,因為this指向myobj 注意 內部匿名函式不屬於當前物件的函式,因此this指向了全域性物件window var m...