如何扩展javascript对象方法

时间:2011-10-24 08:13:37

标签: javascript oop

我有这个对象

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

X.a() // will do somthing

我想修改一个方法,它会再做一个声明说“counter ++”

所以

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

如果我想对对象X的所有方法进行此更改。 那么我怎么能通过像这样的对象循环来完成这个呢?

for(var i in X){

}

当我通过存储ooldArray方法尝试它时,但在执行它时将用lastone替换所有方法..

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:-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);
}