我正在阅读javascript 的好部分,作者给出了一个这样的例子:
['d','c','b','a'].sort(function(a,b) {
return a.localeCompare(b);
});
Run Code Online (Sandbox Code Playgroud)
其行为符合预期。现在我尝试做这样的事情 - 这是下一个合乎逻辑的步骤:
['d','c','b','a'].sort(String.prototype.localeCompare.call);
Run Code Online (Sandbox Code Playgroud)
并且失败并出现错误:
TypeError: object is not a function
Run Code Online (Sandbox Code Playgroud)
现在我想知道为什么......有什么想法吗?
call需要绑定到localeCompare:
['d','c','b','a'].sort(Function.prototype.call.bind(String.prototype.localeCompare));
Run Code Online (Sandbox Code Playgroud)
您遇到问题的原因是您正在通过sort Function.prototype.call。您可能知道,当没有this另外提供时,它将是全局对象(window在浏览器环境中)。因此,当sort试图调用传递给它的功能,它会调用call与this设置为全局对象,这在大多数(所有?)的情况下是不是一个函数。因此,您必须始终call如此绑定。thislocaleCompare
| 归档时间: |
|
| 查看次数: |
2494 次 |
| 最近记录: |