JavaScript .bind()方法简单测试

标签 javascript prototype bind

我想测试 JavaScript .bind() 方法,但我做错了一些事情 - 值(通过引用传递)没有增加,仍然是 5...

这是我的代码:

function MyObject() {
  this.value = 5;
}

MyObject.prototype.add = function fn0() {
  return this.value++;
}

var ancestor = new MyObject();

function functionChanger(fnc, obj) {
 fnc.bind(obj);
}

functionChanger(ancestor.add, ancestor);

 

我想要实现的正确版本

function functionChanger(fnc) {
 fnc();
}

functionChanger(ancestor.add.bind(ancestor));

最佳答案

我想你想要callapply :

function functionChanger(fnc, obj) {
    fnc.call(obj);
}
/* or */
function functionChanger(fnc, obj) {
    fnc.apply(obj);
}

请注意bind创建一个函数,因此您也可以使用(不推荐):

function functionChanger(fnc, obj) {
    fnc.bind(obj)();
}

关于JavaScript .bind()方法简单测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20869955/

相关文章:

hadoop - HBase 绑定(bind)到错误的地址

c++ - 模板增加扣除/替换失败

javascript - 在 JavaScript 中读取 JSON 值坐标并绘制到 Google map

java - CSS、JS、图片压缩技术,避免服务器多次请求

javascript - 使用javascript获取一个asp.net Label控件

java - 如何从 JSP 页面生成 PDF 报告?

javascript - 关于javascript的toFixed()函数用法的问题

forms - 如何在 symfony2 表单集合中自定义数据原型(prototype)?

JavaScript:动态扩展原型(prototype)是一种不好的做法吗?

javascript 递归调用对象方法