Параметры, объекты и переменные функции jquery - PullRequest
0 голосов
/ 22 декабря 2011

Фрагмент ниже - это функция из большой библиотеки, которую мне дал другой сотрудник.Эта функция вызывается из другого метода в прототипе.Параметр results представляет собой строку XML, которая выглядит примерно так:

<spellResult .....>
    <c o=0 l=1 s=1>string string string />
    <c o=10 l=1 s=1>string string string />
</spellResult>
parseResults: function(results) {
    var self = this;
    this.results = [];
    var spellcheckFound = $(results).find('c');
    $(results).find('c').each(function() {
        var $this = $(this),
            offset = $this.attr('o'),
            length = $this.attr('l');
        self.results.push({
            word: self.text.substr(offset, length),
            suggestions: $this.text().split(/\s/)
        });
    });
    this.displayResults();
},

Итак:

  1. Чем параметр results отличается от this.results?
  2. Разве строка this.results = []; не очищает параметр результатов?
  3. Является ли self.results другим объектом / переменной или ссылкой на один из других?
  4. Еще один вопрос новичка - что это за $(results) во всем этом?

Я дергал себя за волосы, пытаясь заставить это работать, поэтому любая помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 22 декабря 2011

чем параметр 'results' отличается от 'this.results'?

this.results относится к свойству с именем Results на this. Значение this зависит от того, как была вызвана функция. results - это XML, который обрабатывается. Неверно называть это results; лучшее имя будет resultsXML.

не строка 'this.results = [];' очистить параметр результатов?

Да; код обрабатывает XML, заменяя this.results результатами обработки.

Является ли 'self.results' другим объектом / переменной или это ссылка на один из других?

Поскольку self присвоено this, self.results будет ссылаться на тот же объект, что и this.results. Использование переменной self является обычной техникой для захвата значения this в коде. Поскольку вызов each устанавливает новое значение для this - обрабатываемый элемент XML - поэтому self был инициализирован до this перед вызовом each.

и еще один вопрос новичка - что такое $ (результаты) во всем этом?

Это создание оболочки объектов jQuery вокруг XML, позволяющей коду использовать навигацию в стиле jQuery внутри XML.

0 голосов
/ 22 декабря 2011

1. Чем параметр результатов отличается от этого.results?

results - локальная переменная, переданная функции. this.results - это свойство объекта, называемое this, которое является самой функцией (все в javascript - это объект, включая функции)

2. Разве это не строка this.results = []; очистить параметр результатов?

this.results = []; является сокращением для объявления нового пустого объекта массива. обратите внимание, что вам не нужно использовать ключевое слово «var» при объявлении нового свойства объекта - оно просто создает его автоматически или перезаписывает предыдущее свойство, если имена совпадают.

3. Является ли self.results другим объектом / переменной или является ссылкой на один из других?

, поскольку self и this являются ссылкой на один и тот же объект, this.results и self.results являются одним и тем же свойством. в противном случае вы получите сообщение об ожидаемом объекте, когда говорите self.results.push (...)

4. Еще один вопрос новичка - что такое $ (результаты) во всем этом?

$ (results) берет ваш объект javascript, называемый results, и оборачивает его в объект jquery, который позволяет вам получить доступ к функциям-прототипам jquery, таким как .find () и .each ()

На заметку - пожалуйста, перепишите код, который вы разместили. Мои глаза болят. Особенно в той части, где вы выполняете всю обработку для инициализации переменной spellcheckFound, а затем снова выполняете всю эту обработку на следующей строке вместо того, чтобы просто использовать spellcheckFound: P

0 голосов
/ 22 декабря 2011

Что это за:

 var self = this;
 this.results = [];

С this.results = []; вы очищаете array.

Это слишком мало информации, чтобы дать правильный ответ, так как мы не знаем, что такое results точно?

Как говорит Джаспер, сделайте некоторую правильную отладку с console.log, т.е. console.log(typeof results) и console.log(results), чтобы увидеть, что будет.

«Еще один вопрос новичка - что такое $ (результаты) во всем этом?»

$(results) является объектом results. По сути, $(results).find('c').each(function() { находит элементы c в results и проходит по ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...