Я не совсем понимаю, что вы делаете, но вот некоторые комментарии в коде:
> var samplearray = new Array();
> var Guy1 = new Object();
> Guy1.name = "Bill";
> Guy1.health = 100;
> samplearray.push(Guy1);
> Guy2.name = "Dan";
> Guy2.health = 125;
> samplearray.push(Guy2);
Это считается лучше стиль (и немного опрятнее) использовать объект и массив initialisers *:
var guy1 = {name: "Bill", health: 100};
var guy2 = {name: "Dan", health: 125};
var samplearray = [guy1, guy2]
Кроме того, имена переменных, начинающиеся с прописной буквы, по соглашению зарезервированы для функций-конструкторов.
> //this is all done previously by a function on pageload
Вы должны ждать, пока элементы будут доступны до взаимодействия с ними, ожидая события нагрузки является одним из способов сделать это.
> function afunction(id) {
Что такое идентификатор? Кажется, вы относитесь к нему как к объекту позже.
Ah, поэтому id - ссылка на элемент, а id.id
должен возвращать идентификатор элемента.
> for (item in samplearray) {
Вы должны объявить переменные, чтобы они не стали глобалам, так:
for (var item in samplearray) {
Это вообще не очень хорошая идея использовать for..in с массивом, так как для того, чтобы члены возвращаются могут отличаются от их индексного порядка. Кроме того, он будет возвращать все перечислимые свойства, в том числе в цепочке прототипов, поэтому вам следует защититься от этого, если это не то, что вы хотите. Гораздо лучше использовать для цикла, так что вы можете гарантировать порядок и избежать нецифровых перечисляемых свойств:
var item;
for (var i=0, iLen=samplearray.length; i<iLen; i++) {
item = samplearray[i];
> if (item == id.id){
Так пункта будет ссылкой на член Объектному samplearray и id.id
является строкой, так это всегда будет возвращать false, ни один из следующих кодов не будет запущен.
> document.getElementById("changeme").innerHTML=item.name;
В for..in версии, пункт это имя свойства строки, но вы лечите его как объект, так это вызовет ошибку и выполнение скрипта прекратится.
В версии для петли, это ссылка на один из объектов в samplearray, поэтому вышеприведенное должно «работать».
> document.getElementById("changeme").innerHTML=samplearray[item].name;
Это должно было сработать при условии пункт был числовое имя свойства, а не какой-либо другой перечислимы собственности.
> //neither does this
> } }}
*
Intialiser является общим термином для выражения, которое создает объект (например, объект, массив регулярных выражений и т.д.). Если инициализатор использует литеральные значения, его можно назвать «литералом».
Что такое * id *? Как вы называете эту функцию? * item * не должно быть * window *, если вы не делаете что-то, что не показано с помощью * samplearray *. – RobG
В какой ситуации было бы справедливо следующее сравнение: item == id.id? – Prusprus
Это функция, вызываемая кнопкой onclick (это) изображением. Поэтому id.id должен ссылаться на идентификатор изображения, и я хочу проверить, эквивалентен ли это имени переменной объекта в цикле. – Cid2196