javascript объектный литерал и jquery каждый - PullRequest
0 голосов
/ 09 января 2012

Я пытаюсь начать изучать OO JS и у меня есть один быстрый вопрос (я упростил свою актуальную проблему для упрощения).

По сути, следующее предупреждение просто возвращает [объект объекта], я хочу, чтобы он вернулся3 различных окна оповещений

<body>

    <div id="bob">
        <div>f</div>
        <div>t</div>
        <div>q</div>
    </div>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script>
    $(document).ready(function() {

        var Person = {
            name: $('#bob div').each(
                function(){
                    $(this).text();
                }
            )                   
        }
        alert(Person.name);

    });
    </script>

</body>

Любое руководство высоко ценится.

Adi.

Ответы [ 2 ]

0 голосов
/ 09 января 2012

В javascript alert ящики не то, что вы возвращаете.Это то, что вы называете и что всплывает предупреждение.Поэтому, если вы хотите 3 оповещения, вам нужно вызвать функцию alert 3 раза.В настоящее время вы звоните только один раз.

Я подозреваю, что вы пытаетесь объединить результаты селектора.В этом случае используйте .map вместо .each:

var Person = {
    name: $('#bob div').map(function() {
        return $(this).text();
    }).get().join(',')                  
};
alert(Person.name);

Другая возможность - поместить оповещение в обратный вызов .each.

0 голосов
/ 09 января 2012

Возможно, вы можете сделать что-то вроде этого:

var Person = {
    alertNames: function() {
        $('#bob div').each(
            function(){
                alert($(this).text());
            }
        );
    };
}
Person.alertNames();

Обратите внимание, что в JavaScript имена, начинающиеся с заглавной буквы (в данном случае Person), обычно зарезервированы для конструктора функции (то есть функции, которые используются для создания новых экземпляров с использованием ключевого слова new).Они обычно называются types , потому что имя classes будет вводить в заблуждение.

Если вы хотите сделать свой код действительно объектно-ориентированным, вы можете попробовать что-то вроде этого:

var Person = function(name) {
    var container = $('#' + name);

    this.alertNames: function() {
        $('div', container).each(
            function(){
                alert($(this).text());
            }
        );
    };
}
var bob = new Person('bob');
bob.alertNames();

Рекомендуемое чтение:

...