Как получить доступ к методу / полю конструктора из вложенной функции - PullRequest
0 голосов
/ 03 апреля 2012

Я пытаюсь получить доступ к полю конструктора из вложенной функции.

Вот мой код:

var Box = function() {
  this.div = $("div#mydiv");
  this.guide = {
     div: $("div#mydiv2"),
     scroll: function() {
        $(document).scrollTo(this.div); //Want to scroll to mydiv2
        alert(Box.div.attr("id")); //Want to alert mydiv id
                                   //How do I access the div field of the Box constructor?
     }
  }
}

если я вызову метод прокрутки следующим образом:

var a = new Box();

$("#button").click(function() {
a.guide.scroll();
});

Box.div возвращается как неопределенное.

Если я попытаюсь alert id свойства div внутри метода scroll как this.div, он будет использовать свойство div внутри объекта guide. Я пытался ссылаться на поле div вне объекта guide, используя Box.div, но это не работает. Пожалуйста, помогите мне разобраться.

Ответы [ 2 ]

2 голосов
/ 03 апреля 2012

Это потому, что объекты this в вашей функции прокрутки относятся к самой функции.Вам нужно кэшировать ссылку на самый внешний объект "this" и использовать его вместо этого.См. Эту скрипку для примера:

http://jsfiddle.net/tuando/kBc5K/

2 голосов
/ 03 апреля 2012

Добавьте это в первый ряд функции Box:

var Box = function() {
    var self = this;

Затем в предупреждении используйте self вместо this, так как this не относится к функции верхнего уровня (коробка).

$(document).scrollTo(self.div); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...