javascript - Function.prototype.call.bind 是如何工作的?

标签 javascript prototype

我在思考这个函数时遇到了一些麻烦:

var toStr = Function.prototype.call.bind( Object.prototype.toString );
toStr([]) // [object Array]​​​​​​​​​​​​​​​​​​​​​​​​​​​

如第 2 行所示,此函数如何接受参数?

最佳答案

嗯,

  • Function.prototype.call 引用“call”函数,该函数用于调用具有选定的this 值的函数;
  • 随后的 .bind 引用 Function 原型(prototype)上的“bind”函数(记住:“call”也是一个函数),它返回一个总是有 this 的新函数 设置为传入的参数。
  • 传递给“bind”的参数是 Object 原型(prototype)上的“toString”函数,因此整个表达式的结果是一个新函数,它将运行带有 this 集的“call”函数到“toString”函数。

因此,结果就像这段代码:Object.prototype.toString.call(param)。然后,“console.log”调用将一个数组传递给该函数,这样就可以了。

编辑 请注意,Object.prototype.toString.call( param ) 实际上就像 param.toString(),当“param”是一个对象。如果不是,那么“call”函数的语义就是按照 JavaScript 的正常方式将它变成一个函数(数字 -> 数字,字符串 -> 字符串等)。

编辑,2016 年 5 月 24 日 — 上面的最后一句话在 ES2015 中并不准确。新的 JavaScript 运行时不会“自动装箱”原始类型,当它们涉及作为 this 值的函数调用时。

关于javascript - Function.prototype.call.bind 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11121586/

相关文章:

javascript - 为什么我的输入永远不会被隐藏?

javascript - 除了通过 "this"之外,还可以从原型(prototype)函数内部访问实例吗?

javascript - 创建一个可以单独工作但也可以有子方法的原型(prototype)方法

JavaScript – 从另一个原型(prototype)函数调用原型(prototype)函数?

javascript - 带有此关键字的原型(prototype)没有给出预期的结果

javascript - rails : Populating bootstrap dropdown with ajax

javascript - 单击相应的删除按钮从表中删除行

javascript - dojo声明构造函数: object member reference undefined

javascript - Turbolinks 相当于 window.load 事件

java - Spring:如何实例化一个带有运行时参数的 Spring bean?