2011-12-08 7 views
0

私は何をしようとしているのかを正確には知らないが、機能はPHPクラスの__get()関数をオーバーライドするのと非常によく似ています。例えば、これは私がしたいことです。JavaScriptの動的オブジェクト

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); 

基本的には、未使用のキーを定義済みのキーにリダイレクトする方法が必要です。私はこれに関するいくつかの調査をして、本当に何を検索するのか分からなかった。どんな助けでも大歓迎です。ありがとう。

+0

も参照してください:http://stackoverflow.com/questions/2266789/is-there-an-equivalent-of-the-nosuchmethod-feature-for-properties-or-a-way/3757676#3757676 – CMS

答えて

2

これは、現在のJavaScriptの実装では不可能です。あなたがObjCや他の言語で持っているようなデフォルトのゲッターはありません。

2

get関数を作成することはできますが、それ以外にはあなたが意図することはできません。

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

getメソッドのコードの変更を見つけてください。メモリ値参照をobjparam1で変更することができます。

var obj = { 
    param1:'a', 

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

    get: function(input){ 
     this.param1 = input; 
     return input; 
    } 
} 

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

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


//alerts 'anything' 
alert(obj.param1); 
+0

ありがとうございます。これは便利でした。 +1 – kss

関連する問題