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
网友评论