美文网首页
JS绑定函数bind()理解/curry的使用

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

作者: 风吹过的夏天lee | 来源:发表于2017-10-11 18:34 被阅读0次

    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

    相关文章

      网友评论

          本文标题:JS绑定函数bind()理解/curry的使用

          本文链接:https://www.haomeiwen.com/subject/kftgyxtx.html