apply call與bind函式的模擬實現

2021-09-21 13:16:30 字數 1516 閱讀 8790

this是函式呼叫時產生的物件,該物件繫結函式呼叫時所在執行環境。

call/bind方法在使用乙個指定的 this 值和若干個指定的引數值的前提下呼叫某個函式或方法。

function

(obj = window,

[...args]

)function

mycall

(obj = window,

...args)

bind() 方法會建立乙個新函式。當這個新函式被呼叫時,bind() 的第乙個引數將作為它執行時的 this,之後的一串行引數將會在傳遞的實參前傳入作為它的引數。(來自於 mdn )

實現要點:

1、返回值為函式

2、函式呼叫時this指向於傳入物件

3、函式可傳遞引數

4、該函式可作為建構函式

第一版:實現1~3

function.prototype.

mybind

=function

(obj = window,

...args)

}第二版:實現4

作為構造函式呼叫時,使用new關鍵字。該關鍵字將this指向生成例項,因此實際呼叫時this指向例項。

function.prototype.

mybind

=function

(obj = window,

...args)

//修改返回函式的 prototype 為繫結函式的 prototype,那麼例項就可以繼承繫結函式的原型中的值

f.prototype = self.prototype

//f與self共用乙個原型

//如果直接修改f.prototype,則self.prototype也會變化,做乙個優化

returnf}

逐句講解:

```js

//建立函式並返回該函式

functionf(

)//...

return

f// this instanceof f 若作為構造函式呼叫,則this指向例項

//不作為構造函式呼叫時, this指向傳入物件obj

self.

(this

instanceoff?

this

: obj, args.

concat

(params)

)

第三版:優化返回函式原型

function

mybind

(obj = window,

...args)

functionf(

) f.prototype = self.prototype

f.prototype =

newf()

return

f}

JS中apply call和bind的區別

在js中,這三者都是用來改變函式的this物件的指向的,他們有什麼樣的區別呢。在說區別之前還是先總結一下三者的相似之處 1 都是用來改變函式的this物件的指向的。2 第乙個引數都是this要指向的物件。3 都可以利用後續引數傳參。那麼他們的區別在 的,先看乙個例子。var xw var xh xw...

JS中的apply call和bind的用法和區別

如果第乙個傳入的引數是null,那麼,在函式體內的this會指向全域性物件,在瀏覽器中就是window 2 call 當採用call呼叫的時候 3 bind 和call很相似 區別在於bind方法返回值是函式以及bind接收的引數列表的使用。call 是把第二個及以後的引數作為 fn 方法的實參傳進...

RadGridView樣式設定與Binding

binding 注意設定autogeneratecolumns false,避免自動生成列 在 telerik radgridview 中設定屬性 rowindicatorvisibility collapsed 在 telerik radgridview中 設定屬性 showgrouppanel ...