Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как циклом сложить значения свойств объекта? (https://javascript.ru/forum/dom-window/44089-kak-ciklom-slozhit-znacheniya-svojjstv-obekta.html)

hoax 06.01.2014 02:18

Как циклом сложить значения свойств объекта?
 
В учебнике есть пример с использованием this.a+this.b

Но что если свойств десятки?

var o = {a:1, b:34, c:352} //итд.

function s(obj) {

for(key in obj) {
 obj[key]+? //..... kak tut?
 }


}

s(o)

Vlasenko Fedor 06.01.2014 02:40

var o = {a:1, b:34, c:352} //итд.

function s(obj) {
var rez = 0;
for(key in obj) {
 rez += obj[key];
 }
return rez;
}

alert(s(o));

hoax 06.01.2014 23:48

спасибо, а вот еще вопросик, надо чтобы при вызове ф-и f(); ее параметр записывался в массив, вот только при каждом вызове, он его перезаписывает, а не добавляет :

function f(x) {
       var mass = [];
        mass.push(x);
        
       alert(mass[0]) // сначало 1, а потом 2 (и все на индексе [0])
        
      }

f(1);
      f(2);

Vlasenko Fedor 06.01.2014 23:55

вам нужно использовать замыкания, вот пример простого счетчика
http://learn.javascript.ru/closures-usage

hoax 09.01.2014 00:41

Спасибо, с данный материалом все ясно, получилось сделать следующее

function mass() {

  
  
  var m = [];
   return function(arg) {
     
     m.push(arg) 
     return m; 
   
    
  }
}

 var mas = mass();
      mas(122);
      mas(323)
      alert(mas()) // оба аргумента в массиве[/HTML]


Но как быть если ф-ю с этими аргументами передаются из другой ф-и? :
function mass() { // должна учитывать переданные аргументы

  
  
 var m = [];
   return function(arg) {
     
     m.push(arg) 
     return m;
   
    
  }
}

      var copy;
      function argument(arg) {
       
  // возможно какие-то манипуляции с arg
      
     copy =  mass();
        copy(arg)
        
      }
      argument(1);
       argument(23);
      
      alert(copy()) // в массиве только 23 :(((

рони 09.01.2014 01:16

hoax,
может вам 20 строку перенести на 15 ?

kostyanet 09.01.2014 01:16

Цитата:

Сообщение от hoax
вот только при каждом вызове, он его перезаписывает

Так выньте массив из внутренних органов ф-ии и будет вам счастье без всяких замыканий.

Иначе либо рисуйте объект, либо юзайте функцию как объект, поскольку она и так объект.

На нормальном языке программирования ваше желания выражается статической переменной, которую можно в js изобразить как вот тут советуют http://stackoverflow.com/questions/1...-in-javascript


Часовой пояс GMT +3, время: 16:52.