gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:55:33 26 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() 也可能返回之后实际调用的函数。

最佳答案

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

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

如果要在同一个对象上调用多个链,就会面临如何检测链结束的问题。为此,您需要让每个链式函数返回一个包装器围绕原始 this,这将存储关于先前调用的状态。

如果你使用包装方法,obj.func1().func2() 调用 obj 上的 func1,但是 func2 在从 func1 返回的包装器上调用,这个包装器可以知道之前的 func1 调用。如果您稍后调用 obj.func2().func1(),那么 func2 现在会在 obj 上调用,而 func1在知道先前的 func2 调用等的包装器上调用,等等。

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

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