gpt4 book ai didi

javascript - 在 JavaScript 对象上定义一个 __invoke 魔术方法?

转载 作者:行者123 更新时间:2023-11-30 12:47:34 24 4
gpt4 key购买 nike

例子:

function Queue() {
}

var q = new Queue();

当像函数一样调用时,是否可以让 q 调用方法?调用 q() 只会报错:

TypeError: object is not a function

最佳答案

让代码工作的最简单方法是从构造函数返回一个函数:

function Queue()
{
return function() {
alert('Hello world');
};
}

这是可行的,因为从构造函数返回一个对象将“替换”原本是 Queue 的实例。基本上,这种方法允许您返回一个“公共(public)接口(interface)”并且 Queue 的实例可以关闭:

function Queue()
{
var self = this; // instance of Queue

return function() {
// use 'self'
alert('Hello world');
};
}

但是您从构造函数返回的现在不再是队列实例,因此像 PHP 这样的真正的 __invoke() 是不可能的。

更新

用例(在删除之前)是这样的:

function Queue() {
var q = [];

return function(f) {
q.push(f);

return function(status) {
if(q.length > 0) {
return q.shift()();
}
}
};
}

var q = Queue(),
a = q(function() { console.log('a'); }),
b = q(function() { console.log('b'); });

b(); a(); // prints 'a' and then 'b'

关于javascript - 在 JavaScript 对象上定义一个 __invoke 魔术方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22004883/

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