簡體   English   中英

函數式編程問題是JS

[英]Functional programming issue is JS

我在玩bind callapply 我試圖通過將從一個函數返回的任何內容傳遞給該對象的方法來更新對象的屬性。

並且此更新附加到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函數。 它只是通過了從一開始就返回的所有內容。

有沒有解決方法?

我覺得使用curry可以解決這個問題? 但不確定在這種情況下如何實施。

您不是在尋找curry,而是在尋找合成 (以及您已經在通過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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM