對call apply和bind的理解及他們的區別

2021-10-06 22:40:10 字數 1213 閱讀 2472

console.

log(function.prototype.

hasownproperty

('call'))

; console.

log(function.prototype.

hasownproperty()

);console.

log(function.prototype.

hasownproperty

('bind'))

;

上面**中,返回的全是true,表明三種方法都是繼承自function.prototype中。普通的物件、函式和陣列都繼承了function.prototype物件中的三個方法,所以這三個方法在物件、函式和陣列中都能使用。

call的引數是直接放進去的,第二個第三個第n個引數都是用逗號分隔,直接放到後面。例如:obj.myfun.call ( db , 『成都』 , … , 『武漢』 )

bind除了返回時函式以外,它和call的引數一樣。

三者的引數不限定是string型別,允許是各種型別,包括函式、object等。

call()方法呼叫乙個函式,其具有乙個指定的this值和分別提供的引數。

第乙個引數:在fun函式執行時指定的this值。如果指定了null或undefined則內部this指向window。後面的引數:指定的引數列表。

var color =

'red'

;var o =

function

saycolor()

saycolor.

call

(this

)//red

saycolor.

call

(window)

//red

saycolor.

call

(o)//blue

bind方法用於指定函式內部的this指向(執行時所在的作用域),然後返回乙個新函式。bind方法並非立即執行乙個函式。

window.color =

'red'

var o =

function

saycolor()

var bindsaycolor = saycolor.

bind

(o);

bindsaycolor()

// => blue

call apply和bind的原理

call 作用 call 方法就是使用乙個指定this值和若干個指定引數值的前提下呼叫摸個函式或方法。var foo function bar 如果不對this進行繫結執行bar 會返回undefined bar.call foo 1也就是說call 改變了this的指向,指向了foo 下面進行一下...

call apply和bind方法詳解

call方法 使用乙個指定的this值和單獨給出的乙個或多個引數來呼叫函式。var obj function getname name getname.call obj mei var obj function getname name,age 這兩種方法的用途很多,下面我就舉幾個例子。1.基本用法...

call apply和bind的用法

在改變this指向的時候,經常會把這三個方法混淆,下面就詳細的整理一下三者的用法和區別 var a var b b.sayname.call a,1,2,3 輸出 張三 6第乙個引數是改變 this 指向的物件 第二個引數必須是乙個陣列 使用後會自動執行 var a var b var arr 1,...