gpt4 book ai didi

javascript - 在javascript中获取getter的调用参数

转载 作者:行者123 更新时间:2023-11-30 06:29:52 29 4
gpt4 key购买 nike

给定一个像这样的 javascript 对象:

var myThing = {};
Object.defineProperty(myThing, 'gen', {
'get' : function() {
// access caller name here, so I can return cool/neat stuff
}
});

我希望能够获得 myThing.gen 的子项,但要知道在 getter 中要求的是什么。

例如:

var coolThing = myThing.gen.oh.cool;
var neatThing = myThing.gen.oh.neat;

我想要 getter 中的“oh.cool”或“oh.neat”部分,因此我可以基于此做出决定,并返回特定于它的内容。我可以接受在 IE 或旧浏览器中不起作用的解决方案,因为它主要用于 Node 。

这样做的实际目的是让我可以请求 myThing.gen.oh.neat 并让 myThing.gen getter 解析为 require('./oh/neat.js ') 并返回它。

由于 require 缓存,这是一种动态加载模块化功能的有效方式,并且具有整洁的界面(而不是仅仅在需要的地方动态构建 require),而无需提前知道结构。

如果没有名称内省(introspection)函数可以帮我得到这个,我可以做一些不那么优雅的事情,像这样:

myThing.gen = function(name){
return require('./' + name.replace('.', '/') + '.js');
}

然后这样做:

neatThing = myThing.gen('oh.neat');

不过,我不太喜欢这种语法。我查看了 chai 的动态 expect(var).to.not.be.empty 内容,但无法弄清楚如何完全动态地完成它。也许没有办法。

无需真正解决动态发现调用者的问题,我可以这样做:

var myThing = {};
Object.defineProperty(myThing, 'gen', {
'get' : function() {
return {
'oh':{
'cool': require('./oh/cool.js'),
'neat': require('./oh/neat.js')
}
};
}
});

有没有办法动态地做到这一点?

最佳答案

您看不到属性 gen 将来的用途,因此您需要返回一个对象,该对象的属性会在实际发生时对该对象的用途作出 react :

var myThing = {};
Object.defineProperty(myThing, 'gen', {
'get' : function() {
var no = {};
Object.defineProperty(no, 'cool', {
get: function(){ alert('cool'); }
});
Object.defineProperty(no, 'neat', {
get: function(){ alert('neat'); }
});
return { oh: no };
}
});

演示:http://jsfiddle.net/UjpGZ/1/

关于javascript - 在javascript中获取getter的调用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18421597/

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