Перенос объема «этого» во внутренние функции - PullRequest
1 голос
/ 03 марта 2011

Как я могу расширить сферу этого вовнутрь? Я подумал, что переназначение переменной с более высокой областью действия поможет ... что я делаю неправильно? http://jsfiddle.net/8bqXM/

function Player(configs) {

    this.opts = {
        playerID: "cSurf"
    };
    configs = $.extend(this.opts, configs);

    var the = this;

    this.init = function(){
        var $player = $("#" + the.configs.playerID);
        alert($player.attr("id"));
    }
}
var cSurf = new Player();
$(document).ready(function(){
        cSurf.init();
});

Ответы [ 2 ]

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

В вашем коде configs не является публичным членом создаваемого объекта Player.Вы объявили это без var, поэтому это глобальная переменная.

configs = $.extend(this.opts, configs);

должно быть:

this.configs = $.extend(this.opts, configs);

Тогда в вашем init() вы можете сделать the.configs.playerID.

Пример: http://jsfiddle.net/rCuXa/

(Ваш jsFiddle также имел MooTools, загруженный вместо jQuery. Проверьте меню слева.)


РЕДАКТИРОВАТЬ:

Кстати, поскольку вы звоните init() из контекста нового объекта Player, вы действительноНе нужно использовать the в качестве ссылки на this.

Внутри init метода, this относится к Player, который был создан, когда вы вызываете его таким образом.

var $player = $("#" + this.configs.playerID);

Пример: http://jsfiddle.net/rCuXa/1/


EDIT2: Дополнительно, если init() всегда собираетсяЧтобы вызвать его из контекста Player экземпляра, который вы создаете, вы можете рассмотреть возможность размещения его в prototype объекте Player.

Таким образом, он будет использоваться всеми экземплярамивместо воссоздания для каждого:

Player.prototype.init = function(){
               // ---------v----------"this" is the instance of Player
    var $player = $("#" + this.configs.playerID);
    alert($player.attr("id"));
}

Пример: http://jsfiddle.net/rCuXa/2/

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

У вас просто небольшая ошибка здесь. Вы назначаете расширение для конфигов, чего нет в этом, но затем вы ссылаетесь на него позже через «как». Это работает:

function Player(configs) {

  this.opts = {
    playerID: "cSurf"
  };
  this.configs = $.extend(this.opts, configs);

  var the = this;

  this.init = function(){
    var $player = $("#" + the.configs.playerID);
    alert($player.attr("id"));
  }
}
var cSurf = new Player();
cSurf.init();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...