Как расширить методы объекта JavaScript - PullRequest
4 голосов
/ 24 октября 2011

У меня есть этот объект

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

X.a() // will do somthing

Я хочу изменить метод так, чтобы он делал еще одно утверждение, скажем "counter ++"

So

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

если я хочу внести это изменение во все методы объекта X. Так, как я могу сделать это, проходя через объект как ?

for(var i in X){

}

когда я попробовал это, сохранив в ooldArray методы, но при выполнении он заменит весь метод на lastone ..

Ответы [ 2 ]

2 голосов
/ 24 октября 2011

Я полностью уверен, что желаемое поведение должно быть достигнуто с использованием прототипного наследования.Но я ничего не знаю о вашей архитектуре и требованиях, поэтому вот решение, написанное так, как вы хотите:

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 голосов
/ 24 октября 2011

Вот что вы хотите:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...