gpt4 book ai didi

javascript - 文字对象函数范围,如何将函数和上下文传递给第三个

转载 作者:行者123 更新时间:2023-11-28 08:26:40 25 4
gpt4 key购买 nike

我有这个回调“机器”:它被设计为对象文字。

APC.UTIL.Callback = {
nn: 0,
step: 0,
Myargs: null,
that: null,
internal: function () {
var the_f = that.Myargs[that.step];
if (that.step < that.nn) the_f(that.internal);
else {
the_f();
that.Myargs = null;
}
that.step++;
},
loop: function () {
this.Myargs = arguments;
this.nn = this.Myargs.length - 1, this.step = 0;
that = this;
this.internal();
},
}

我就是这么用的:

 var F1 = function (loop_back) { ... bla bla ; loop_back(); }
var F2 = function (loop_back) { ... bla bla ; loop_back(); }
var F3 = function (loop_back) { ... bla bla ; loop_back(); }
var F4 = function (loop_back) { ... bla bla ; loop_back(); }

// -------------------------------------------------------
APC.UTIL.Callback.loop(F1,F2,F3,F4);

回调将自己称为第一个,内部的。然后 F1 接收该函数以便稍后使用它并再次调用“内部”,F2 等等......( F1 F2 F3 存储到 Myargs 数组中。)

已知问题...缺少那个或这个(范围)。在第二次调用“that”时,值再次变为 null...

我想要一个针对所调用函数的干净解决方案。我不想在这些中编写更多代码。var F1 = 函数 (loop_back) { ... bla bla ;循环返回(); }正如您所看到的,我只编写了loop_back参数作为参数,并使用它来进行回调。

我认为我的案例很特殊,与范围和对象文字相关的问题不同。

如有任何帮助,我们将不胜感激。

最佳答案

您将单步放置在错误的位置,如果您环回调用之后调用它,则永远无法到达该单步。

var example = {
nn: 0,
step: 0,
Myargs: null,
that: null,
internal: function () {
var the_f = that.Myargs[that.step];
if (that.step < that.nn) {
that.step++;
the_f(that.internal);
} else {
// ...this method expects a function as a parameter.
the_f(function(){});
that.Myargs = null;
}
// will never be reached
// that.step++;
},
loop: function () {
this.Myargs = arguments;
this.nn = this.Myargs.length - 1, this.step = 0;
that = this;
this.internal();
},
}
var F1 = function (loop_back) { console.log("F1"); loop_back(); }
var F2 = function (loop_back) { console.log("F2"); loop_back(); }
var F3 = function (loop_back) { console.log("F3"); loop_back(); }
var F4 = function (loop_back) { console.log("F4"); loop_back(); }

example.loop(F1, F2, F3, F4);

关于javascript - 文字对象函数范围,如何将函数和上下文传递给第三个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22319297/

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