Javascript 获取请求的子对象的名称

Javascript 获取请求的子对象的名称,javascript,object,switch-statement,return-value,Javascript,Object,Switch Statement,Return Value,如果我有一个包含匿名函数的对象,我如何知道请求的子对象是什么,这样我就可以返回一个值 var obj = function(a) { switch (a) { case 'subprop1': return 'subval1'; case 'subprop2': return 'subval2'; case 'subprop3': return 'subval3'; default: return 'defaultval';

如果我有一个包含匿名函数的对象,我如何知道请求的子对象是什么,这样我就可以返回一个值

var obj = function(a) {
    switch (a) {
        case 'subprop1': return 'subval1';
        case 'subprop2': return 'subval2';
        case 'subprop3': return 'subval3';
        default: return 'defaultval'; 
    }
}
因此,如果我打电话:

obj.subprop1
我应该得到:

subval1
调用
obj(“subprop1”)

obj
被定义为函数,因此您可以像调用声明函数一样调用它(这称为命名函数表达式)

如果要执行
obj.subpop1
,则需要将
obj
定义为这样一个对象

obj = {
    subprop1: 'subval1',
    subprop2: 'subval2',
    ...
};
console.log(obj.subprop1); //Spits out "subval1"

除非您的环境支持,否则对于普通对象,这实际上是不可能的

在这种情况下,这将非常容易(尚未测试):


我相信像DefaultGetter这样的东西(如果你指的是对象,而不是你发布的代码片段中的函数)可以解决你的问题,但显然没有这样的东西,你可以在这里阅读更多
var obj = function(a) {
    switch (a) {
        case 'subprop1': return 'subval1';
        case 'subprop2': return 'subval2';
        case 'subprop3': return 'subval3';
        default: return 'defaultval'; 
    }
};

var objProxy = new Proxy(obj, {
    get: function (target, name) { return target(name); }
});

objProxy.subprop1; //should return subval1
objProxy.nonExisting; //shoud return defaultval