gpt4 book ai didi

javascript - 为什么 call 不能用作 A 排序函数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:52:54 25 4
gpt4 key购买 nike

我正在阅读 javascript the good parts ,作者举了一个例子:

['d','c','b','a'].sort(function(a,b) {
return a.localeCompare(b);
});

其行为符合预期。现在我尝试做这样的事情 - 这是下一个合乎逻辑的步骤:

['d','c','b','a'].sort(String.prototype.localeCompare.call);

失败并出现错误:

TypeError: object is not a function

现在我想知道为什么...有什么想法吗?

最佳答案

调用需要绑定(bind)到localeCompare:

['d','c','b','a'].sort(Function.prototype.call.bind(String.prototype.localeCompare));

您遇到问题的原因是您正在传递 sort Function.prototype.call。如您所知,如果没有提供 this,它将是全局对象(在浏览器环境中为 window)。因此,当 sort 尝试调用传递给它的函数时,它将调用 call 并将 this 设置为全局对象,这在大多数情况下(全部?) cases 不是函数。因此,您必须绑定(bind) call,以便 this 始终是 localeCompare

关于javascript - 为什么 call 不能用作 A 排序函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8461237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com