gpt4 book ai didi

javascript - 链接 JavaScript (ES6) 代理对象

转载 作者:行者123 更新时间:2023-11-29 14:41:18 25 4
gpt4 key购买 nike

我希望能够做到这一点:

x.where('age').gt(20);

x.__calls // [['where', ['age']], ['gt', [20]]]

wheregt 只是示例。我不知道会调用什么函数,它们可能是任何东西,除了填充 __calls 数组之外它们什么都不做。

到目前为止,我有以下使用 ES6 的 Proxy 的代码对象

var x = new Proxy({ 
__calls: []
}, {
get: function (target, name) {
if (name in target) {
return target[name];
} else {
return () => {
target.__calls.push([name, Array.prototype.slice.call(arguments)]);
return x;
}
}
}
});

如果我删除 return x 行,我可以执行 x.where('age'); x.gt(20) 以获得正确的 __calls。但是,对于 return x,由于某种原因它会进入无限递归...

最佳答案

我添加了 console.log(name) 来找出导致无限递归的调用,结果是 inspectconstructor。所以我只是将他们列入黑名单:)

var x = new Proxy({ 
__calls: []
}, {
get: function (target, name) {
if (name in target || name === 'inspect' || name === 'constructor') {
return target[name];
} else {
return function() {
target.__calls.push([name, Array.prototype.slice.call(arguments)]);
return x;
}
}
}
});

关于javascript - 链接 JavaScript (ES6) 代理对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38004688/

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