gpt4 book ai didi

javascript - 在库中实现 Javascript 链接的最佳方式

转载 作者:搜寻专家 更新时间:2023-11-01 04:46:52 26 4
gpt4 key购买 nike

我正在创建一个 JavaScript 库。我一直在尝试实现链接。

0:我首先想到的是:

function V(p) {
return {
add : function(addend) { return V(p + addend); },
sub : function(subtra) { return V(p - subtra); },
};
}

使用这种方法我可以轻松链接:

V(3).add(7).sub(5) // V(5)

不幸的是,结果总是一个包装的 V() 函数,我无法通过这种方式提取结果值。所以我想了一下这个问题,想出了两个半解决方案。

1:将标志传递给最后一个方法

function V(p, flag) {
if(flag)
return p;
else
return {
add : function(addend, flag) { return V(p + addend, flag); },
sub : function(subtra, flag) { return V(p - subtra, flag); }
};
}

使用此方法,我可以通过将标志传递给我使用的最后一个方法来结束链:

V(3).add(7).sub(5, true) // 5

虽然这工作得很好,但它需要一些代码重复并使链接的可读性降低,我的代码也不那么优雅。

2:使用start()和end()方法

_chain = false;
function V(p) {
function Wrap(w) {
return (_chain) ? V(w) : w;
}
return {
add : function(addend) { return Wrap(p + addend); },
sub : function(subtra) { return Wrap(p - subtra); },
start : function() { _chain = true; },
end : function() { _chain = false; return p; }
};
}

使用此方法,您无需更多代码即可执行单个操作:

V(3).add(7) // 10

但是链接需要另外两个方法,使得事情的可读性大大降低:

V(3).start().add(7).sub(5).end() // 5

所以基本上我只是在寻找将链接实现到我的库中的最佳方法。理想情况下,我正在寻找可以使用任意数量的方法并且不需要以不优雅的方式终止链的东西。

V(3).add(7).sub(5) // 5, perfect chaining

最佳答案

为什么不引入一个私有(private) 变量并对其进行处理?我想那更方便。另外,拥有一个最终返回计算值的纯“getter”可能是个好主意。这可能看起来像这样:

function V(p) {
var value = p;

return {
add: function(addend) {
value += addend;
return this;
},
sub: function(subtra) {
value -= subtra;
return this;
},
get: function() {
return value;
}
};
}

console.log(V(3).add(7).sub(5).get()); // 5

显然,您不能在 getter 函数 中返回 Object。因此,您需要一些方法来结束链接并返回一个值。

关于javascript - 在库中实现 Javascript 链接的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5370538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com