gpt4 book ai didi

javascript - 仅在调用同一对象时回调

转载 作者:行者123 更新时间:2023-11-30 05:31:10 25 4
gpt4 key购买 nike

我正在尝试合并检查回调函数是否是对同一对象的调用。

我为我的 friend 制作了一个粗略的 Sketch(因为他不喜欢 JS),他理解得很好。

function foo(callback){
if(callback === foo) callback.call();
}
foo(function(){
foo()
});

所以我将检查给定参数中的回调是否是同一个函数(自执行?)。在第一个实例中,我想我可以检查被调用的函数是否是对象的一个​​实例。因为我正在使用 Object 构造函数。 (if( newfoo instanceof foo )) 但事实证明被调用的 Function 是一个 IIFE 并且 Callback 的类型是一个 Function 而不是一个 Object。

我编写了一个 Javascript 示例,它很好地涵盖了我的情况。

(function(){
foo = function(){
// Here are Private Functions within this Object
return{
bar: function(callback){
if(typeof callback !== "undefined" && typeof callback === "function") callback(); // && if callback === object constructor
}
}
}
}(this));


var Foo = new foo();
Foo.bar(function(){
Foo.bar(function(){ // This Callbacks should be executed
alert('Callback got called!'); // But the Callback that is no instance of 'Foo' should not be executed!
});
})

我希望我已经解释得足够好。希望有人能帮助我。

谢谢!

最佳答案

您正在尝试解决非常奇怪的问题,但仍然有可能使其正常工作。从技术上讲,您只想调用那些在任何地方都有 Foo.bar 调用的回调。在这种情况下,您可以使用 toString() 方法获取函数源代码,并使用正则表达式对其进行简单检查。像这样:

(function () {

function hasOwnFunction(callback) {
return /\.bar\(/.test(callback.toString());
}

this.foo = function () {
// Here are Private Functions within this Object
return {
bar: function (callback) {
if (typeof callback === "function" && hasOwnFunction(callback)) callback();
}
}
}
}(this));


var Foo = new foo();
Foo.bar(function () {
alert('I should be called 1');
Foo.bar(function () {
alert('I should be called 2')
Foo.bar(function () {
alert('Should not be called');
})
});
});

另请注意,回调成为Foo 的实例 的唯一方法是情境Foo.bar(Foo.bar)。只有这样比较 callback === this.bar 才有意义。然而这当然不是你想要的,因为它会导致无限递归。

关于javascript - 仅在调用同一对象时回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26911111/

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