console.
log(function.prototype.bind)
// function
console.
log(function.prototype.
bind()
)// function
console.
log(function.prototype.bind.name)
// bind
console.
log(function.prototype.
bind()
.name)
// bound
以上可以看出bind是函式function原型鏈上的屬性,bind是乙個函式,bind執行完之後返還得還是乙個函式,改函式得名稱為bound
bind函式使用動態的繫結this,相比很多寫react的時候用過bind動態的繫結this,看下面的**
var foo =
function
getinfo
(***,age)
var bound = getinfo.
bind
(foo,
'女')
;var result =
bound
('12'
)// wucr 女 12
console.
log(result)
// false
根據以上執行得出結論
bind函式裡面的this指向它傳遞引數的第乙個引數物件
在呼叫bind的時候引數也被接收了,也就是說bound函式裡面的引數是別合併了
bind後的返回值函式,執行後返回值是原函式(original)的返回值。
第一版bind實現
function.prototype.
bind1
=function
(thisarg)
return bound
}
以上就是初版bind的實現,但是有乙個問題就是,bind返回的函式,有可能會被new 當作乙個構造函來用,所以還是需要補充一下的方法
function.prototype.
bindfn
=function
(thisarg)
else
}else
}return bound
}
bind函式 模擬實現JS的bind方法
先看一下bind是什麼?var obj obj typeof function.prototype.bind functiontypeof function.prototype.bind functionfunction.prototype.bind.name bindfunction.protot...
bind的模擬實現
var context context window var result 判斷是否有第二個引數 if arguments 1 else delete context.fn return result var foo function bar name,age bind 方法會建立乙個新的函式。當這...
深入JavaScript 模擬實現bind
bind bind 方法會建立乙個新函式。當這個新函式被呼叫時,bind 的第乙個引數將作為它執行時的 this,之後的一串行引數將會在傳遞的實參前傳入作為它的引數。由此我們可以首先得出 bind 函式的兩個特點 例1var foo function bar var bindfoo bar.bind...