Использование «this» в $ .ready в прототипе - PullRequest
0 голосов
/ 03 марта 2011

Как передать в переменную прокси «this» контекст экземпляра Class? Например, this.saySomething () не делает то, что я хотел бы.

Есть ли у вас другие рекомендации по организации кода OOJS?

// Truveo Video Player Class
function Player(){

    // Player Defaults
    this.opts = {
        volume: 0 // Initial volume settings
    };
}

// Initialize player setup / methods
Player.prototype.init = function(configs){

    // Overwrite defaults with custom configs
    this.opts = $.extend(this.opts, configs);

    $(document).ready(function(){
        this.saySomething();
    });
    $(window).load(function(){
        // do something else
    });
}

Player.prototype.saySomething = function(){
    alert(this.opts.volume);
}

// Create instance for channel surf
var configs = {volume:10};
var cSurf = new Player();
cSurf.init(configs);

Ответы [ 2 ]

3 голосов
/ 03 марта 2011

Сохраните копию this перед входом в функцию:

var me = this;
$(document).ready(function(){
    me.saySomething();
});
1 голос
/ 03 марта 2011

В дополнение к правильному ответу из @ Box9 , одной возможностью будет установить значение this для всего вызова .ready().

Вы можете сделать это с помощью метода jQuery.proxy() [документы] .

$(document).ready( $.proxy(function(){
    this.saySomething();
}, this) );

Теперь в функции, которая отправляется на .ready() он будет иметь ваш Player объект в качестве значения this.

...