2015-02-06 3 views
-1

Я пытаюсь подытожить две функции, которые являются частью одного и того же объекта.Как суммировать две разные функции в javascript

var player = { 
stats: 0, 
level: 1, 
inventory: 30, 
baseStrength: 5, 
weaponStrength: 0, 
armorStrength: 0, 
accessoryStrength: 0, 
totalStrength: function() { 
    return (player.baseStrength + player.weaponStrength + player.armorStrength + player.accessoryStrength); 
}, 
baseEndurance: 5, 
weaponEndurance: 0, 
armorEndurance: 0, 
accessoryEndurance: 0, 
totalEndurance: function() { 
    return (player.baseEndurance + player.weaponEndurance + player.armorEndurance + player.accessoryEndurance); 
}, 
baseAgility: 5, 
weaponAgility: 0, 
armorAgility: 0, 
accessoryAgility: 0, 
totalAgility: function() { 
    return (player.baseAgility + player.weaponAgility + player.armorAgility + player.accessoryAgility); 
}, 
baseDexterity: 5, 
weaponDexterity: 0, 
armorDexterity: 0, 
accessoryDexterity: 0, 
totalDexterity: function() { 
    return (player.baseDexterity + player.weaponDexterity + player.armorDexterity + player.accessoryDexterity); 
}, 
baseIntelligence: 5, 
weaponIntelligence: 0, 
armorIntelligence: 0, 
accessoryIntelligence: 0, 
totalIntelligence: function() { 
    return (player.baseIntelligence + player.weaponIntelligence + player.armorIntelligence + player.accessoryIntelligence); 
}, 
baseWisdom: 5, 
weaponWisdom: 0, 
armorWisdom: 0, 
accessoryWisdom: 0, 
totalWisdom: function() { 
    return (player.baseWisdom + player.weaponWisdom + player.armorWisdom + player.accessoryWisdom); 
}, 
baseLuck: 5, 
weaponLuck: 0, 
armorLuck: 0, 
accessoryLuck: 0, 
totalLuck: function() { 
    return (player.baseLuck + player.weaponLuck + player.armorLuck + player.accessoryLuck); 
}, 
experience: 0, 
maxexperience: 100, 
gold: 0, 
health: 50, 
maxhealth: function() { 
    return ((player.baseEndurance + player.weaponEndurance + player.armorEndurance + player.accessoryEndurance) * 10); 
}, 
mana: 50, 
maxMana: function() { 
    return (player.totalWisdom * 10 + player.totalIntelligence * 5); 
}, 
manaRegen: function() { 
    return (player.totalWisdom); 
}, 
mindamage: function() { 
    return Math.floor((player.totalStrength * 0.5)); 
}, 
maxdamage: function() { 
    return (player.totalStrength * 0.8); 
}, 
hpregen: function() { 
    return Math.floor((player.totalEndurance)); 
}, 
accuracy: function() { 
    return Math.floor((95 + (player.totalAgility * 0.05 + player.totalLuck * 0.1))); 
}, 
defense: function() { 
    return (player.totalDexterity * 1.2 + player.totalEndurance * 0.5); 
}, 
evasion: function() { 
    return (5 + (player.totalAgility * 0.5 + player.totalLuck * 0.15)); 
}, 
criticalChance: function() { 
    return (player.totalAgility * 0.5 + player.totalLuck * 0.5); 
}, 
criticalDamage: function() { 
    return (player.totalStrength * 0.1 + player.totalDexterity * 0.1); 
}, 
Lifesteal: function() { 
    return (player.totalIntelligence/100); 
}, 
Lifesteal2: function() { 
    return (player.totalIntelligence); 
}, 
dropRate: 0, 
expRate: 0 
}; 

нормально, так как вы можете видеть, у меня есть 5 свойств объекта для каждого стат, базы/оружия/брони/принадлежности/всего. Total - это функция для суммирования всех этих показателей.

После этого у нас есть игрок maxhealth, ущерб, который также является функцией, которая рассчитывается с использованием «total» stat, но так как это также функция, которую я не могу заставить работать. так что единственный способ, которым я выяснил, это вместо (player.totalEndurance * 10)

я должен сделать ((player.baseEndurance + player.weaponEndurance + player.armorEndurance + player.accessoryEndurance) * 10)

и часть, где я его отображения в HTML:

document.getElementById("maxhealth").innerHTML = player.maxhealth(); 

я добавить(), так как его функция, но ее не работает. Я получаю результат NaN, функция либо не определена, либо ошибка «объект не является функцией».

Я надеюсь, что вы можете помочь мне :) спасибо

+0

Кажется, работает хорошо для меня: http://jsfiddle.net/ cwecuxhu/ –

ответ

2

Часть 2 (окончательный):

Для расчета с помощью totalEndurance вам нужно добавить скобки на ваш звонок, потому что это функция.

player.totalEndurance() 

Часть 1 (до комментариев):

Я думаю, что что-то может отсутствовать в вашем вопросе.

Когда я ставлю переменную игрока, чтобы JSfiddle, а затем выполнить

document.getElementById("maxhealth").innerHTML = player.maxhealth(); 

все работает отлично:

http://jsfiddle.net/630jv67p/

+0

потому что эта часть фактически '((игрок.baseEndurance + игрок.weaponEndurance + player.armorEndurance + player.accessoryEndurance) * 10); }, 'Я проверил его, чтобы увидеть, работает ли это так, но я хочу использовать' player.totalEndurance * 10' вместо – Mariusz

+0

totalEndurance не является переменной, определенной в проигрывателе исходного вопроса. Я вижу, что вы добавили его как функцию, поэтому для доступа к нему вам нужно будет выполнить 'player.totalEndurance() * 10', а в другом месте вы хотите ссылаться на него, вам нужно будет ссылаться на него как' player.totalEndurance() ' –

+0

oh yeah -_- спасибо, сделайте ответ или отредактируйте его, чтобы я мог принять ^^ еще раз спасибо – Mariusz

Смежные вопросы