问题
I seem to have a problem with objects' properties' scope. I would like to output each of the Message
objects' title
and message
properties to a select
element, but it is Not Working! What am I doing incorrectly
<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>
I can verify that the foreach is in fact running two iterations, but I cannot get the values out of the objects.
回答1:
don't use for (c in messages
).
in
is for iterating over properties of an object, not for iterating over values in an array.
Use the tried and true
for(var i = 0; i < messages.length; i++) {
...
}
Also, you are not putting your getTitle
and getMessage
methods on a prototype, which is kind of wasteful.
回答2:
the syntax for the for in
loop in js is :
for(var key in obj)
{
var currentElement = obj[key];
}
来源:https://stackoverflow.com/questions/9065358/javascript-object-property-not-in-scope