一旦函数与`bind`绑定,它的`this`就不能再被修改了?

时间:2017-08-23 10:41:37

标签: javascript function call bind

只是玩了一下JS,我想知道为什么以下代码输出"foo"而不是"bar"

String.prototype.toLowerCase.bind("FOO").call("BAR")

据我了解,.bind("FOO")会返回"FOO" this的函数,因此调用.bind("FOO")()会输出"foo"

但是,.call("BAR")"BAR"调用this函数,因此应输出"bar"

我哪里错了?

2 个答案:

答案 0 :(得分:2)

  

android { packagingOptions { exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/notice.txt' exclude 'META-INF/license.txt' exclude 'META-INF/dependencies.txt' exclude 'META-INF/LGPL2.1' } } 会返回.bind("FOO")

"FOO"的函数

不完全。它返回一个绑定this {strong} "FOO" this的函数。它的工作原理如下:

toLowerCase

您可以随意重新绑定所返回功能的function bind(func, thisArg) { return function () { return func.call(thisArg); } } thiscall(此处:func)已经"硬编码&#34 ;为toLowerCase(此处:thisArg)。

答案 1 :(得分:0)

你是对的。函数与.bind()绑定后,其this将无法再修改。使用this的第一个参数永久“替换”.bind()