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

2017-10-11  本文已影响0人  风吹过的夏天lee

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

上一篇下一篇

猜你喜欢

热点阅读