Javascript动态对象

时间:2011-12-08 20:53:34

标签: javascript

我真的不知道用正确的词来描述我想要做的事情,但功能与覆盖PHP类的__get()函数非常相似。例如,这就是我想要做的。

var obj = {
    param1:'a',

    func1:function(){ return '1';},

    catch_all:function(input){
        return input;
    }
}

//alerts 'a'
alert( obj.param1 );

//alerts '1'
alert( obj.func1() );

//alerts 'anything'
alert( obj.anything );

基本上我想要一种方法将任何未使用的密钥重定向到预定义的密钥。我对此做了一些研究,并且真的不知道要搜索什么。任何帮助是极大的赞赏。感谢。

4 个答案:

答案 0 :(得分:2)

你可以制作一个get函数,但除此之外你不能做你想要的。

获取功能:

var obj = {
    param1:'a',

    func1:function(){ return '1';},

    get: function(input){
        return this[input] !== undefined ? this[input] : 'ERROR';
    }
}

//alerts 'a'
alert( obj.param1 );

//alerts '1'
alert( obj.func1() );

//alerts 'ERROR'
alert( obj.get('anything') );

小提琴:http://jsfiddle.net/maniator/T2gWx/

答案 1 :(得分:2)

使用当前的JavaScript实现这是不可能的。在ObjC或其他语言中没有任何类型的默认getter。

答案 2 :(得分:1)

请在get方法的代码中找到更改。它可以通过obj的{​​{1}}来修改内存值参考。

param1

答案 3 :(得分:0)

我认为你想要的是和谐代理。

http://wiki.ecmascript.org/doku.php?id=harmony:proxies&s=proxy

它们还没有使用JavaScript,至少在当前的任何Web浏览器实现中都没有。