JS绑定函数bind()理解/curry的使用

JavaScript新手经常犯的一个错误是将一个方法从对象中拿出来,然后再调用,希望方法中的 this 是原来的对象,这样做会丢失方法中this的原来对象。使用bind()可以很好的处理这个问题。
例如:
this.x = 9;
var module = {
x: 81,
getX: function() { return this.x; }
};

module.getX(); // 返回 81

var retrieveX = module.getX; // 返回一个闭包(匿名函数) 赋值给变量
retrieveX(); // 返回 9, 在这种情况下,"this"指向全局作用域

// 创建一个新函数,将"this"绑定到module对象
// 新手可能会被全局的x变量和module里的属性x所迷惑
var retrieveX = module.getX;
var boundGetX = retrieveX.bind(module);
boundGetX(); // 返回 81

curry的用法
var converter = function(ratio, symbol, input) {
return [(input*ratio).toFixed(1),symbol].join(" ");
}

var kilosToPounds = converter.curry(2.2,"lbs");
var litersToUKPints = converter.curry(1.75, "imperial pints");
var litersToUSPints = converter.curry(1.98, "US pints");
var milesToKilometers = converter.curry(1.62, "km");

kilosToPounds(4); //8.8 lbs
litersToUKPints(2.4); //4.2 imperial pints
litersToUSPints(2.4); //4.8 US pints
milesToKilometers(34); //55.1 km

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,120评论 19 139
  • 函数对象的bind()方法会创建一个新函数,bind()方法返回由指定的this值和初始化参数改造的原函数拷贝。 ...
    microkof阅读 5,163评论 0 0
  • 木槿花开的夏天
    Kidult_Jingege阅读 1,126评论 0 0
  • ●柏邦妮 昨晚说起我的初恋,我的初恋是轰轰烈烈的。现在想想,简直是惨烈。 那个人比我小一届,是学弟,在十年前,还不...
    青年才俊小哥儿阅读 3,258评论 0 11
  • 你记不记得第一次离家远行时的情愫,迷茫害怕充满未知,尤其是和别人,那些你原先不认识不熟悉的人共同参与这个世界的故...
    羚钰先生zly阅读 2,383评论 0 0

友情链接更多精彩内容