Javascript对象属性不在范围内
我似乎对对象的“属性”范围有问题。我想将每个消息对象的标题和消息属性输出到一个select元素,但它不起作用!我做错了什么Javascript对象属性不在范围内,javascript,jquery,oop,encapsulation,Javascript,Jquery,Oop,Encapsulation,我似乎对对象的“属性”范围有问题。我想将每个消息对象的标题和消息属性输出到一个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"> $(
<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实际上正在运行两次迭代,但我无法从对象中获取值。不要在消息中使用c
in用于迭代对象的属性,而不是迭代数组中的值
使用久经考验的方法
for(var i = 0; i < messages.length; i++) {
...
}
另外,您没有将getTitle和getMessage方法放在原型上,这是一种浪费。js中for in循环的语法是:
for(var key in obj)
{
var currentElement = obj[key];
}
在数组上使用for…进行迭代,这是不应该做的,但这不是问题所在。c不是数组的元素,而是当前属性名索引。看到了,你应该看看,谢谢!将这些方法放在原型上的优势是什么?对象块之外的语法看起来会让我以后在C族背景中感到困惑,在C族背景中,类方法是在类代码块内声明的。dotancohen这个问题非常流行。再见,也谢谢你。我明白了,比起我在罗马,我最好习惯于罗马人在其中一个链接上对一位评论者的解释。