2014-11-18 3 views
1

В настоящее время я работаю над «шпионом» для других функций. Идея довольно проста: я просто заменяю вызов исходной функции этой оригинальной функцией плюс приращение счетчика.Реализация функции - шпион

Проблема в том, что мой счетчик виден только во внутренней области. Как я могу открыть его для свойства объекта?

function Spy(target, method){ 
    this.count = 0; 

    var counter = 0; 

    target[method] = (function() { 

    return function() { 
     ++ counter; 
     this.count = counter; 
     console.log(counter); 
     return target[method];  
    };  
    })(); 
} 

var spy = new Spy(console, 'error'); 

console.error('error1'); // prints 1, but not 'error1' 
console.error('error2'); // prints 2, but not 'error2' 
console.error('error3'); // prints 3, but not 'error3' 

console.log(spy.count); // prints 0 

ответ

3

Я думаю, что вы Поиск

function Spy(target, method){ 
    this.count = 0; 

    var self = this, 
     oldmethod = target[method]; 

    target[method] = function() { 
    self.count++; 
    console.log(self.count); 
    return oldmethod.apply(target, arguments);  
    }; 
} 
1

Попробуйте это:

function Spy(target, method){ 
    this.count = 0; 

    var counter = 0; 

    target[method] = (function(self) { 

    return function() { 
     ++ counter; 
     self.count = counter; 
     console.log(counter); 
     return target[method];  
    };  
    })(this); 
} 
1

Этот код будет работать:

function Spy(target, method){ 
    this.count = 0; 

    var counter = 0; 
    var self = this; 

    target[method] = (function() { 

    return function() { 
     ++counter; 
     self.count = counter; 
     console.log(counter); 
     return target[method];  
    };  
    })(); 
} 

Вы пытались получить доступ к this сферу внутренней функции, которые вы возвращавшихся

Смежные вопросы