JavaScript新手經(jīng)常犯的一個錯誤是將一個方法從對象中拿出來怨规,然后再調(diào)用羡疗,希望方法中的 this 是原來的對象挺物,這樣做會丟失方法中this的原來對象。使用bind()可以很好的處理這個問題纺棺。
例如:
this.x = 9;
var module = {
x: 81,
getX: function() { return this.x; }
};
module.getX(); // 返回 81
var retrieveX = module.getX; // 返回一個閉包(匿名函數(shù)) 賦值給變量
retrieveX(); // 返回 9, 在這種情況下榄笙,"this"指向全局作用域
// 創(chuàng)建一個新函數(shù),將"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