只是玩了一下JS,我想知道为什么以下代码输出"foo"
而不是"bar"
:
String.prototype.toLowerCase.bind("FOO").call("BAR")
据我了解,.bind("FOO")
会返回"FOO"
this
的函数,因此调用.bind("FOO")()
会输出"foo"
。
但是,.call("BAR")
为"BAR"
调用this
函数,因此应输出"bar"
。
我哪里错了?
答案 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);
}
}
,this
至call
(此处:func
)已经"硬编码&#34 ;为toLowerCase
(此处:thisArg
)。
答案 1 :(得分:0)
你是对的。函数与.bind()
绑定后,其this
将无法再修改。使用this
的第一个参数永久“替换”.bind()
。