2013-06-05 4 views
0

Итак, я пытаюсь создать массив строк цвета, который выпадающий имеет значения своих опций, равные индексу массива, однако, когда я предупреждаю обо всем массиве или просто о значении, возвращает undefined.Почему мой массив undefined

function band(col, num, snum) { 
     var color = new Array(col,""); 
     var nmbr = num; 
     var strn = snum; 
     this.getColor = function() { 
      return color; 
     }; 
     this.getNum = function() { 
      return nmbr; 
     }; 
     this.getStrn = function() { 
      return strn; 
     }; 

    } 

    var opis_r1 = new band("black", "", ""); 
    var opis_r2 = new band("black", "", ""); 
    var opis_r3 = new band("gold", "", ""); 
    var opis_r4 = new band("gold", "", ""); 
    var opis_r5 = new band("brown", "", ""); 
    var resistance = ""; 
    var resistance2 = ""; 
    opis_r1.color[1] = "brown"; 
    opis_r1.color[2] = "red"; 
    opis_r1.color[3] = "orange"; 
    opis_r1.color[4] = "yellow"; 
    opis_r1.color[5] = "green"; 
    opis_r1.color[6] = "blue"; 
    opis_r1.color[7] = "violet"; 
    opis_r1.color[8] = "grey"; 
    opis_r1.color[9] = "white"; 
    /*for (var i = 1; i < opis_r1.color.length; i++) { 
     opis_r2.color[i] = opis_r1.color[i]; 
    }*/ 
    opis_r2.color=opis_r1.color; 
    opis_r3.color[1] = "black"; 
    opis_r3.color[2] = "brown"; 
    opis_r3.color[3] = "red"; 
    opis_r3.color[4] = "orange"; 
    opis_r3.color[5] = "yellow"; 
    opis_r3.color[6] = "greeen"; 
    opis_r3.color[7] = "blue"; 
    opis_r3.color[8] = "violet"; 
    opis_r4.color[1] = "silver"; 
    opis_r4.color[2] = "no color"; 
    opis_r5.color[1] = "red"; 
    opis_r5.color[2] = "orange"; 
    opis_r5.color[3] = "yellow"; 
    opis_r5.color[4] = "no color"; 
    function hop2() { 
     alert("hop"); 
     alert(opis_r1.color[0]); 
     gen_res_count(); 
    } 
    function gen_check() { 
     var res; 
     var temp, temp1; 
     temp = opis_r1.color[document.forms['std_res_gen'].R11.value] + " - "+opis_r2.color[document.forms['std_res_gen'].R22.value] + " - " + opis_r3.color[document.forms['std_res_gen'].R33.value] + " - "; 
     res = temp; 
     return res; 
    } 

    function gen_res_count() { 
     if ((document.forms['std_res_gen'].R11.value == '?') ||  (document.forms['std_res_gen'].R22.value == '?') || (document.forms['std_res_gen'].R33.value == '?') || document.forms['std_res_gen'].R44.value == '?' || document.forms['std_res_gen'].R55.value == '?') { 
      window.alert("Choose values at all fields."); 
      document.forms['std_res_gen'].T33.value = ""; 
     } 
     else { 
      resistance2 = gen_check(); 
      alert("rcount"); 
      gen_explain(); 
     } 
    } 

    function gen_explain() { 
     document.forms['std_res_gen'].T33.value = resistance2 + opis_r4.color[document.forms['std_res_gen'].R44.value] + " - " + opis_r5.color[document.forms['std_res_gen'].R55.value]; 
    } 
+2

Вы должны упростить свой код, сделать его наименьшим возможным примером того, что у неподвижных предметов есть проблема, с которой вы сталкиваетесь. Это поможет людям найти местонахождение проблемы - и может помочь вам исправить это самостоятельно! – ColinE

+1

Единственное свойство ваших объектов 'band' -' getColor', 'getNum' и' getStrn', которые являются всеми методами. Когда вы делаете 'var color = new Array (col," ");', он делает «частную» переменную, которую вы не можете получить вне этой функции конструктора ... что означает, что вы не можете получить доступ к 'opis_r1.color' – Ian

+0

Следует избегать использования оператора 'new', пока он/она не поймут, как это работает и изменяется в зависимости от того, где вы его называете. Это идеальная ловушка и способ пойти на неудобные ошибки. Используйте простые объекты, простые объекты классные. –

ответ

4

вы обращаетесь в неверной области, следует использовать this.color

function band(col, num, snum) { 
     var self = this; 
     this.color = new Array(col,""); 
     var nmbr = num; 
     var strn = snum; 
     this.getColor = function() { 
      return this.color; 
     }; 
     this.getNum = function() { 
      return nmbr; 
     }; 
     this.getStrn = function() { 
      return strn; 
     }; 

    } 

или использовать функцию сеттера, так как у вас уже есть геттер

function band(col, num, snum) { 
     var self = this; 
     var color = new Array(col,""); 
     var nmbr = num; 
     var strn = snum; 
     this.setColor = function(index,c) { 
      color[index] = c; 
     } 
     this.getColor = function() { 
      return color; 
     }; 
     this.getNum = function() { 
      return nmbr; 
     }; 
     this.getStrn = function() { 
      return strn; 
     }; 

    } 

затем использовать функцию GetColor для получить массив

-1

Если вы делаете:

var color = new Array(col,""); 

внутри функция, цвет будет действителен только для этого функция scope. Вы должны сделать следующее:

var color = new Array(); 

function band(col, num, snum) { 
    color.push(col); 
} 
Смежные вопросы