2014-12-01 6 views
2

Я пытаюсь использовать _.throttle в объекте, но я думаю, что не понимаю, как это сделать правильно.Использование подчеркивания дроссельной заслонки в объектах - Как сохранить ссылку на объект?

Я использую JQuery и Underscore.js

function object() { 
    this.throtthled = function() { 
     // This should alert 1 
     alert(this.var); 
    } 

    this.fastFunc = _.throttle(this.throtthled, 100); 
    this.var = 1; 
} 


$(function() {  
    var myObject = new object(); 
    $(document).on('mousemove', myObject.fastFunc);  
}); 

Но как вы можете видеть на этом jsfiddle, возвращает только undefined в консоли. Что я делаю неправильно?

+0

Перед тем как создать его, вы получаете доступ к 'this.throtthled'. – Bergi

+0

Вы правы. Я исправил его и не могу получить доступ к 'this.var'. Есть идеи ? –

+0

См. Мой ответ ниже – Bergi

ответ

4

Вы получаете доступ this.throtthled перед тем, создав его, передавая undefined к _.throttle вместо функции (которая имела .apply метод).

Кроме того, для вашего обратного вызова вам потребуется use the correct this context.

// using the prototype: 
function MyObject() { 
    this.fastFunc = _.throttle(this.throttled.bind(this), 100); 
    this.var = 1; 
} 
MyObject.prototype.throttled = function() { 
    // This does alert 1 
    alert(this.var); 
}; 
+0

Он работает! Благодарю. Что делать, если я хочу дать fastFunc параметр? –

+1

Просто дайте параметру «throttled». '_.throttle' передает любые заданные аргументы. – Bergi

+0

Большое спасибо. Я получу более глубокий взгляд на прототип. –