2011-10-24 9 views
4

javascriptオブジェクトのメソッドを拡張する方法私は、それはもう一つの文は、「カウンター++」私は、このオブジェクトを持っている

ので

var oldX = X.a(); 
X.a =function(args){ 
     oldX(args); 
     counter++; 
} 

場合を言うんだろう方法を変更したい

var X = { 
    a:function(args){ 
    }, 
    b:function(args){ 
    }, 
    c: ...... etc 
} 

X.a() // will do somthing 

私はオブジェクトXのすべてのメソッドにこの変更を加えたいと思います。 どうすればのようなオブジェクトをループすることでこれを行うことができますか?私は方法のooldArrayに格納することではなく実行している間、それはlastoneを持つすべてのメソッドを置き換えます、それを試してみました

for(var i in X){ 

} 

..

答えて

2

私はあなたが望む行動はプロトタイプの継承を使用して達成されなければならない完全に確信しています。しかし、私はので、ここであなたが望む方法で書かれたソリューションである、あなたのアーキテクチャと要件について何も知らないんだ。ここでは

var x = { 
     a: function(){ 
      console.log('x.a') 
     }, 
     b: function(){ 
      console.log('x.b') 
     } 
    }, 
    oldx = {}, 
    key; 

for (key in x) { 
    oldx[key] = x[key]; 
    (function(key){ 
     x[key] = function(){ 
      oldx[key].apply(this, arguments); 
      console.log('x.new_'+key); 
     } 
    })(key); 

} 

x.a(); 
x.b(); 
+0

感謝..私は、これを試しました...しかし、私はそれを "xa();のように呼び出すと、 - > xb x.new_b" ---- "xb()は - > xb x.new_b"を返します。すべてのメソッドが最後のメソッドに置き換えられています。 – Sarath

+0

上記のコードは次のように出力されます:x.a x.new_a x.b x.new_b。まさにあなたが望むもの。 – bjornd

+0

実際には、 " for(key in x){ x [key](); の最後のループは何ですか? } " ..? http://jsfiddle.net/KEqw4/1/ – Sarath

-2

は、あなたが望むものである:あなたの答えのための

var x = { 
a:function(){ 
    return "this is a"; 
}, 
b:function(){ 
    return "this is b"; 
}, 
c:function(){ 
    return "this is c"; 
} 
} 

for(var abc in x) 
{ 
    alert(abc); 
} 
+0

OPはメソッドを拡張したいだけでなく、それらを呼び出すことができます。 – bjornd

+0

私はこれを探していません.. – Sarath

関連する問題