call 和 apply的區別與用法

2021-10-24 07:03:44 字數 1446 閱讀 5882

var obj =

function

func

(firstname, lastname)

func.

(obj,

['a'

,'b'])

;// a linxin b

可以看到,obj 是作為函式上下文的物件,函式 func 中 this 指向了 obj 這個物件。引數 a 和 b 是放在陣列中傳入 func 函式,分別對應 func 引數的列表元素。

call( )

call 方法第乙個引數也是作為函式上下文的物件,但是後面傳入的是乙個引數列表,而不是單個陣列。

var obj =

function

func

(firstname, lastname)

func.

call

(obj,

'c',

'd')

;// c linxin d

1.改變 this 指向

var obj =

function

func()

func.

call

(obj)

;// linxin

我們知道,call 方法的第乙個引數是作為函式上下文的物件,這裡把 obj 作為引數傳給了 func,此時函式裡的 this 便指向了 obj 物件。此處 func 函式裡其實相當於

function

func()

2.借用別的物件的方法

先看例子

var

person1

=function()

varperson2

=function()

person1.

call

(this);

}var person =

newperson2()

;person.

getname()

;// linxin

從上面我們看到,person2 例項化出來的物件 person 通過 getname 方法拿到了 person1 中的 name。因為在 person2 中,person1.call(this) 的作用就是使用 person1 物件代替 this 物件,那麼 person2 就有了 person1 中的所有屬性和方法了,相當於 person2 繼承了 person1 的屬性和方法。

3.呼叫函式

function

func()

func.

call()

;// linxin

apply 與call 的區別

function call 方法 function.call thisobj arg1 arg2 argn 它們各自的定義 call 呼叫乙個物件的乙個方法,以另乙個物件替換當前物件。例如 b.call a,args1,args2 即a物件呼叫b物件的方法。它們的共同之處 都 可以用來代替另乙個物件...

apply 與call 的區別

function call 方法 function.call thisobj arg1 arg2 argn 它們各自的定義 call 呼叫乙個物件的乙個方法,用另乙個物件替換當前物件。例如 b.call a,args1,args2 即a物件呼叫b物件的方法。它們的共同之處 都 可以用來代替另乙個物件...

apply 與call 的區別

call 方法 function.call thisobj arg1 arg2 argn 它們各自的定義 call 呼叫乙個物件的乙個方法,用另乙個物件替換當前物件。例如 b.call a,args1,args2 即a物件呼叫b物件的方法。它們的共同之處 都 可以用來代替另乙個物件呼叫乙個方法,將乙...