javascript - 绑定(bind)和应用是什么意思?

标签 javascript

MDN bind

// same as "slice" in the previous example
var unboundSlice = Array.prototype.slice;
var slice = Function.prototype.apply.bind(unboundSlice);

// ...

slice(arguments);

当我像下面这样写时

function add(num1, num2){
     return num1 + num2;
 }
var test = Function.prototype.apply.bind(add);
var result = test([1,2])

这是错误的。 我不知道我的代码哪里错了。

最佳答案

Function.prototype.apply 不仅仅需要参数列表的 [1, 2] 参数 - 它需要 this 参数在它之前。 (docs)换句话说,您的代码实际上正在做的是:

function add(num1, num2){
    return num1 + num2;
}

var result = add.apply([1, 2]);

你想要的是这样的:

function add(num1, num2){
    return num1 + num2;
}

var result = add.apply(null, [1, 2]);

因此可以实现:

function add(num1, num2) {
    return num1 + num2;
}

var test = Function.prototype.apply.bind(add, null);
var result = test([1, 2]);

console.log(result);

关于javascript - 绑定(bind)和应用是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47524273/

相关文章:

javascript - AngularJS - 从 Controller 调用特定指令函数/方法

javascript - 将 Bootstrap 中的事件类添加到 li 元素

javascript - AG-GRID 中的单元合并

javascript - Raphael.js 获取旋转后集合中单个元素的位置

javascript - 如何在 JavaScript 中使用正则表达式来捕获两个特定字符之间的文本?

javascript - 如何在没有 Vue.js CLI 的情况下成功使用 axios(例如,使用 JS Fiddle)

javascript - 更改菜单图像

javascript - 动态下拉菜单 Ruby on Rails form_for

javascript - 如何在 Joi 验证器中添加常量?

javascript - JS : how to create optionally chainable methods