gpt4 book ai didi

javascript - 如何检测 JavaScript 中的链式函数调用?

转载 作者:行者123 更新时间:2023-11-28 04:12:37 25 4
gpt4 key购买 nike

var Obj = {
func1 : function() {
// some code
if (this._hasChainedFunc()) {
// block should be CALLED
}
return this;
},
func2 : function() {
// some code
if (this._hasChainedFunc()) {
// block should be NOT called
}
return this;
},
_hasChainedFunc : function() {
// code which detects if there is a chained function???
}
}

Obj.func1().func2();

函数_hasChainedFunc()有可能的实现吗?此函数应在第一次调用时返回 true(因为随后调用 func2()),在第二次调用时返回 false

在更高级的版本中,_hasChainedFunc()还可能返回之后实际调用的函数。

最佳答案

从技术上讲,您永远无法提前知道当前调用之后是否有另一个调用链接——这显然没有意义,因为它意味着您知道之前会调用一些代码它被称为。如果没有预编译器,你就无法做到这一点,我想这不是你想要的。

相反,可以检查当前调用之前是否有先前的调用链接。这只需要您在对象中保留有关先前调用的某些状态,并在调用新函数时更新它。如果您只使用一个调用链,则可以通过在返回 this 对象之前使 func1func2 更改其上的某些状态来实现此目的。

如果你想在同一个对象上调用多个链,你将面临如何检测链末端的问题。为此,您需要使每个链式函数返回一个围绕原始 this 的包装器,该包装器将存储有关先前调用的状态。

如果使用包装器方法,obj.func1().func2() 会在 obj 上调用 func1,但 func2 在从 func1 返回的包装器上调用,并且该包装器可以知道之前的 func1 调用。如果您稍后调用 obj.func2().func1(),则现在会在 obj 上调用 func2,而 func1在包装器上调用,该包装器知道之前的 func2 调用等。

关于javascript - 如何检测 JavaScript 中的链式函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46136855/

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