打擾標題我不知道如何簡潔地陳述我想要做的事情。我試圖從書籍以及互聯網的片段中教自己的JavaScript。我的第一個測試腳本試圖創建一個對象數組(星號),並使用for循環來讀取這些對象中的數據,以便將對象中存儲的點繪製到畫布上。Javascript:數組中的對象具有未定義的變量?
代碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1
/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
var star = {}
function the_stars() {}
the_stars.prototype = {
constellation: "test",
x: 120,
y: 120
};
function the_stars.set(c,xx,yy) { alert("called"); constellation=c; x=xx; y=yy; };
star["Polaris"] = new the_stars();
star["Polaris"].set("Ursa Minor",250,20);
alert(star["Polaris"].constellation);
star["Mizar"] = new the_stars();
star["Mizar"].set("Ursa Major",50,75);
star["Alderbaran"] = new the_stars();
star["Alderbaran"].set("Taurus",300,150);
star["Rigel"] = new the_stars();
star["Rigel"].set("Orion",350,370);
function make()
{
alert("in make");
var context = document.getElementById('c').getContext('2d');
context.fillStyle = 'white';
context.strokeStyle = 'white';
for(var thestar in star)
{
alert("in for loop "+thestar+thestar.x+thestar.y);
context.arc(thestar.x,thestar.y,40,0,2*Math.PI);
context.stroke();
}
}
</script>
<style type="text/css">
#c {
background-color:#000000;
width:450px;
height:450px;
}
</style>
</head>
<body onLoad='make()'>
<h1>stars</h1>
<canvas id='c'>
</canvas>
</body>
</html>
警報在for循環給我的明星的正確名稱,但告訴我,x和y是不確定的。但這怎麼可能alert(star["Polaris"].constellation);
打印「測試」,所以功能設置不起作用,但默認值設置,但alert("in for loop "+thestar+thestar.x+thestar.y);
打印「undefinedundefined。這是怎麼可能的?
'函數the_stars.set'是什麼? –
因爲你設置變量start []的方式不是數組。這是一個對象。數組只能通過數字索引訪問。在這種情況下,for循環的運行時間將超過您設置的索引數量。查看鏈接http://stackoverflow.com/questions/9526860/why-does-a-string-index-in-a-javascript-array-not-increase-the-length-size瞭解更多詳情。 – jsjunkie