函数式编程问题是JS
Functional programming issue is JS
我在玩bind
call
和apply
。我正在尝试通过将从一个函数返回的任何内容传递给该对象上的方法来更新对象的属性。
此更新附加到 window
调整大小事件。
var el = document.getElementById('someElement');
var resolveLeft = function(element) {
return element.offsetLeft;
};
var someObject = {
setDefaultLeft: function(value) {
this.defaultLeft = value;
console.log(this.defaultLeft);
}
};
// this works
window.addEventListener('resize', function() {
someObject.setDefaultLeft(resolveLeft(el));
});
// this one doesn't
window.addEventListener('resize', someObject.setDefaultLeft.bind(someObject, resolveLeft(el)));
#someElement {
position: absolute;
left: 10%;
}
<div id="someElement"></div>
我有 2 个事件绑定。第一个在每次调整窗口大小时记录更新的值,而第二个仅记录返回的初始值。
我意识到在第二种情况下,该值已经从resolveLeft
返回,并且它不会再次revisit
(可以这么说)resolveLeft
函数。它只是传递从一开始就返回的任何内容。
有解决方法吗?
我有一种感觉,咖喱可以解决这个问题吗?但不确定在这种情况下如何实现。
你不是在寻找咖喱,而是在寻找组合(连同你已经在做的通过bind
的部分应用):
function compose(f, g) {
return x => f(g(x));
}
var set = someObject.setDefaultLeft.bind(someObject);
window.addEventListener('resize', compose(set, resolveLeft).bind(null, el));
相关文章:
- 使用angular.js问题的JavaSpringREST服务
- node.js应用程序中的async.js问题
- 复选框与文本内联-JS问题
- Node.js-chai是一个item对象
- 重构 jQuery in JS 问题
- CSS/.JS问题,<ul><李>在Megamenu中
- 在Meteor:p5.AudioIn()中集成p5.sound.js不是构造函数
- IE9 动态页面 JS 问题
- 对 Drupal 站点的客户端 JS 问题进行故障排除
- 框架的可用性问题是什么
- 寻找为什么 '[1,2,3] === [1,2,3]' 在 JS 中是错误的解释
- 处理数值时出现奇怪的JS问题
- JS-如果是语句运算符,这是怎么编译的
- 循环的Node.js/Is是异步的
- 与阿尔伯特·爱因斯坦有node.js问题
- Firefox的问题是列出当前目录中的所有文件名
- 在JS中是(a==b==c)和((a=+=b)&&(a==c)&&(b==c))相同//对不
- 问题是最后一列的平均值总和-从JSON解析的数据-Angular JS
- 函数式编程问题是JS
- KNOCKOUT.js问题:“H.apply不是一个函数.(在'h.apply(e,r)'中,'