Свойство объекта Javascript находится вне области видимости - PullRequest
0 голосов
/ 30 января 2012

Кажется, у меня проблема с областью свойств объектов.Я хотел бы вывести каждый из Message объектов 'title и message свойств в элемент select, но это Не работает !Что я делаю неправильно

<html><head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
    function Message(title, message) {
        this.title=title;
        this.message=message;
        this.getTitle = function(){
            return this.title;
        };
        this.getMessage = function(){
            return this.message;
        };
    }
    var messages = new Array(
        new Message("First Title", "This is the first message"),
        new Message("Second Title", "This is another message")
    );
    function updateSelect () {
        $("#cannedMessages_button").empty();
        for (c in messages) {
            // First try, with getters and setters
            $("#cannedMessages_button").append($('<option>', { value : c.getMessage() , text : c.getTitle() }));
            // Second try, directly
            $("#cannedMessages_button").append($('<option>', { value : c.message , text : c.title }));
        }
    }
    updateSelect();
});
</script>
</head><body>
<form><select id="cannedMessages_button"></select></form>
</body></html>

Я могу убедиться, что foreach фактически выполняет две итерации, но не могу получить значения из объектов.

Ответы [ 2 ]

1 голос
/ 30 января 2012

не используйте for (c in messages).

in предназначен для перебора свойств объекта, а не для перебора значений в массиве.

Используйте проверенное и истинное значение

for(var i = 0; i < messages.length; i++) {
...
}

Кроме того, выне ставьте ваши методы getTitle и getMessage на прототип, что отчасти расточительно.

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

синтаксис для цикла for in в js:

for(var key in obj)
    {
        var currentElement = obj[key];
    }
...