Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2015, 11:27   #1
Kazik
Форумчанин
 
Регистрация: 27.05.2009
Сообщений: 192
Сообщение Объект как параметр функции

Допустим есть объект:
Код:
var stock = {
	build:true,
	lvl:1,
	lvlUpCostGold:[10, 50, 100, 300, 500, 1000, 2000, 5000, 10000, 20000],
	lvlUpCostLumber:[200, 600, 1000, 2000, 10000, 20000, 40000, 100000, 200000],
	lvlUpCostStone:[200, 600, 1000, 2000, 10000, 20000, 40000, 100000, 200000],
	boost:[5000, 10000, 20000, 35000, 55000, 80000, 110000, 145000, 185000, 220000]
}
Нужно написать функцию поднятия уровня, т.е. stock.lvl++;
Как передать это значение (stock.lvl) в функцию в качестве параметра.
Написать типа "function up(stock.lvl)" не получится, т.к. таких объектов больше, а писать функцию для каждого отдельно - глупо.
Kazik вне форума Ответить с цитированием
Старый 17.09.2015, 12:17   #2
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 823
По умолчанию

Код:
var stock = {
...
};

//объект `stock` как глобальный
function inc(propName) {
    stock[propName]++;
}

//передача ссылки на объект `obj`
function incValueOfObject(obj, propName) {
    obj[propName]++;
}

inc('lvl');
incValueOfObject(stock, 'lvl');

inc('count');
incValueOfObject(stock, 'count');
^-.-^ My GitHub

Последний раз редактировалось Fenex; 17.09.2015 в 12:22.
Fenex вне форума Ответить с цитированием
Старый 17.09.2015, 12:22   #3
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Юзать ООП надо
Код:
// старый объект в качестве набора дефолтовых значений
var stock = {
    build:true,
    lvl:1,
    lvlUpCostGold:[10, 50, 100, 300, 500, 1000, 2000, 5000, 10000, 20000],
    lvlUpCostLumber:[200, 600, 1000, 2000, 10000, 20000, 40000, 100000, 200000],
    lvlUpCostStone:[200, 600, 1000, 2000, 10000, 20000, 40000, 100000, 200000],
    boost:[5000, 10000, 20000, 35000, 55000, 80000, 110000, 145000, 185000, 220000]
};

// создаем массив из объектов
var stockList = new Array(10). 
    join('☻').
    split('☻').
    map(function(){
        // создаем сам объект как элемент массива
        return new Stock( stock );
    });

// пробегаем по массиву и левелапаем в зависимости от порядка
stockList.forEach(function( _stock, i ){
    for (var j = i; j--;) {
        _stock.lvlup()
    };
});

// Конструктор объекта
function Stock( obj ) {
    // стартовые значения полей
    this.build = obj.build || true;
    this.lvl = obj.lvl || 1;
    this.lvlUpCostGold = obj.lvlUpCostGold || [];
    this.lvlUpCostLumber = obj.lvlUpCostLumber || [];
    this.lvlUpCostStone = obj.lvlUpCostStone || [];
    this.boost = obj.boost || [];
};

// задаем нужные методы
// ап значения по параметру
Stock.prototype.up = function( param ){
    this[param] += 1;
}

// ап конкретно левла, юзает общий ап
Stock.prototype.lvlup = function(){
    this.up( 'lvl' );
};
Это нативный ООП, на больших проектах обычно юзают фабрики с мэппингами (фреймворков дофига для этого), чтобы у коллег, пришедших с других языков, мозг не разорвало от особенностей JS-ООП.
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 17.09.2015, 12:36   #4
Kazik
Форумчанин
 
Регистрация: 27.05.2009
Сообщений: 192
По умолчанию

спасибо ребята. дальше сам))
Kazik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать параметр функции в const? Mik92 Общие вопросы Delphi 8 01.12.2014 16:56
Как по другому задать параметр функции Tolikv Microsoft Office Excel 13 16.04.2014 05:52
массив как параметр функции makc101 Помощь студентам 2 19.04.2011 22:47
Массив как параметр функции MovsesIV Общие вопросы C/C++ 2 02.12.2010 03:07
C++ - массив как параметр функции kefir Помощь студентам 8 12.04.2010 17:48