获取所请求的子对象javascript的名称

时间:2014-06-21 18:47:52

标签: 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'; 
    }
}

所以,如果我打电话:

obj.subprop1

我应该得到:

subval1

2 个答案:

答案 0 :(得分:1)

除非您的环境支持Proxy,否则普通对象无法实现这一点。

在这种情况下,它很容易(没有经过测试):

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

答案 1 :(得分:-1)

致电obj("subprop1");

obj被定义为函数,因此您可以将其称为声明函数(这称为命名函数表达式)。

如果您想obj.subprop1,则需要将obj定义为对象

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