функции внутри метода

0

Это вопрос общего любопытства, я преподаю программирование на основе объектно-ориентированного javascript, потому что мне нравится структура и гибкость, которые она предоставляет, но у меня возникла проблема, которую я озадачил больше всего на свете. Предположим, у меня есть следующий код:

function total (el,arr,i) 
{

   this.across = function(el,arr,i) {

     $(el).each(function() {
       if(!$(this).attr("id"))
          {
            //-- convert each value to a number and push to items array
            arr.push(parseFloat($(this).val()));
            i = i++;
          }
     });
    return arr;
   };
}

Я могу создать новый экземпляр total и передать ему свои параметры элемента, массива и индекса, а затем вызвать total.across, чтобы заполнить мой массив и обновить индекс я так:

$(document).ready(function (){


  var arr = [[],[],[]];
  var i = 0;
  var el = $("#hourly input");
  var t = new total(el,arr,i);
  alert(t.across());


});  

Мой вопрос заключается в том, что после ввода метода.each ключевое слово this больше не относится к экземпляру total, а теперь к элементу, переданному в методе.each. Как затем я нажимаю возвращаемое значение массиву, переданному исходной функции. В этом примере я использую ключевое слово arr, но это не работает. В этом примере я надеюсь получить новое

  • 0
    Вы уверены, что проблема не только в функции готовности документа?
  • 0
    Или вы ссылаетесь на функцию в вызове оповещения, а не вызываете ее?
Показать ещё 6 комментариев
Теги:
oop

1 ответ

3
Лучший ответ

Назначают контекстную переменную this:

this.across = function(el,arr,i) {
    var that = this;
        $(el).each(function() {
            console.log(that); //is "this" from before the .each
  • 0
    Спасибо, это имеет большой смысл.
  • 0
    В будущем можно будет использовать метод .bind () для назначения контекста функции. К сожалению, он не работает с IE <9, потому что он является частью Javascript 1.8.5 (по крайней мере, без изменения прототипа функции или использования платформы, такой как MooTools)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню