js中bind apply的原始碼解析

2021-10-12 06:53:45 字數 1108 閱讀 5252

bind也是處理this指向的,但是它是預處理this的指向,函式呼叫之後,只是預處理了裡面的this,不會像call一樣自動讓fn執行。要想讓fn執行,我們需要再次呼叫它的返回值:

let obj =

;function

fn(x,y)

1 2}var res=fn.

bind

(obj,1,

2);res()

;

也可以通過繫結事件來執行:

ele.onclick=fn.

bind

(obj,1,

2);

接下來簡單封裝一下原始碼:

function

fn(a, b, c, d)

let obj =

; function.prototype.

mybind

=function

(context,

...arg1)

}let res = fn.

mybind

(obj,1,

2);// bind執行會返回乙個新的函式,以後執行這個新函式的時候,在新函式內部會讓fn執行

console.

log(

res(3,

4));

var obj=

function

fn(x,y,z)

console.

log(x)

;// 1

console.

log(y)

;// 2

console.

log(z)

;// undefined

}fn.

(obj,[1

,2],

3);// 第三個實參就開始接受不到

如有不對,歡迎指出問題所在,定當認真修改。

ConcurrentHashMap的原始碼分析

put final v putval k key,v value,boolean onlyifabsent 在上一步的else if中 f 不為null時,則判斷f的hash值是否為moved,即 1,如果為 1,表示正在擴容 else if fh f.hash moved 協助資料遷移 tab h...

DispatcherServlet的原始碼和流程分析

1 自動配置dispatcherservlet和dispatcherservletregistry 2 註冊dispatcherservlet到servletcontext 3 初始化mvc的元件 handler執行完成後,向dispatcherservlet 返回乙個modelandview物件 ...

Mybatis中Logging模組的原始碼分析

週末又來到了公司吹吹空調,順便記錄下mybatis的點點滴滴。首先mybatis不定義日誌系統,完全依賴於第三方系統完成日誌記錄,利用介面卡模式完成實際操作,原始碼如下 1 定義乙個log介面,具有如下方法 public inte ce log2 然後引入第三方日誌,比如 loggingimpl,實...