2015-04-04 8 views
-2

Вот моя проблема, у меня есть следующий StatCharac объект:Неопределенный метод в JavaScript Object

function StatCharac (initVal) { 
    this.initVal = initVal; 
    this.val = initVal; 
    this.modifs = []; 
    this.getVal = function() { 
    var stat = this.val; 
    for (var i =0; i < this.modifs.length; i++) { 
     stat = this.modifs[i](stat); 
    } 
    return stat; 
    } 
} 

И когда я пытаюсь получить доступ к методу GETVAL, консоль говорит, что этот метод не определен. Я уже определил метод таким же образом в другом объекте, и все было в порядке. Я также попытался использовать атрибут prototype StatCharac, но он не работает ни ...

Что случилось?

EDIT: Когда я говорю, доступ к GETVAL это так:

console.log('message : ' + character.hp.getVal); 

Я пытался сделать это для других методов, и если методы признается, его код должен появиться в сообщении.

Вот где я использую StatCharac:

function Character (nameCharac, id, hp, spell, owner) { 
    this.nameCharac = nameCharac; 
    this.id = id; 
    this.hp = new StatCharac(hp); 
    this.power = new StatCharac(0); 
    this.spell = spell; 
    this.pos = -1; 
    this.canMove = false; 
    this.canPlay = false; 
    this.owner = owner; 
} 

Когда я пытаюсь вызвать GETVAL() Я получаю следующее сообщение об ошибке:

Missing обработчика ошибок на 'гнездо'. TypeError: Object # не имеет метода getVal на Socket. (blabla \ app.js: 237: 55) ...

ОКОНЧАТЕЛЬНЫЙ РЕДАКТ: Хорошо, я нашел, где проблема. На самом деле, я копирую мои персонажи из этого массива:

var dbCharacters = []; 

for (var i = 0; i < 44; i ++) { 
    dbCharacters[i] = new Character('PersoYolo'+(i+1), i, 100, null); 
} 

Для того, чтобы клонировать символы (и не только получить ссылку) Я использую эту функцию:

function clone (o) { 
    return JSON.parse(JSON.stringify(o)); 
} 

Но после испытания, он появляется что эта функция клонирует только атрибуты объекта o, а не его метод. Итак, теперь я должен найти, как клонировать целый объект в JS.

+3

Как вы пытаетесь получить доступ к методу getVal? Где этот код? – Pointy

+2

Просьба указать, как вы вызываете StatCharac и как вы пытаетесь получить доступ к свойству. –

+0

Что такое 'character'? Что такое 'character.hp'? – Oriol

ответ

0

В качестве примера:

function StatCharac (initVal) { 
    this.initVal = initVal; 
    this.val = initVal; 
    this.modifs = []; 
    this.getVal = function() { 
    var stat = this.val; 
    for (var i =0; i < this.modifs.length; i++) { 
     stat = this.modifs[i](stat); 
    } 
    return stat; 
    } 
} 

и назвать его, как это, например:

var obj = new StatCharac(23) 
console.log(obj.getVal()) 
+0

Извините, я не понимаю, чем отличается версия, которую я опубликовал? Я попытался вызвать функцию таким образом, и она не работает. – Kahsius

+0

Можете ли вы показать код, где вы на самом деле называете getVal - код выше работает отлично для меня. –

+0

См .: http://jsfiddle.net/qo3juhmx/ –

0
function StatCharac (initVal) { 
    this.initVal = initVal; 
    this.val = initVal; 
    this.modifs = []; 
    this.getVal = function() { 
    var stat = this.val; 
    for (var i =0; i < this.modifs.length; i++) { 
     stat = this.modifs[i](stat); 
    } 
    return stat; 
    } 
} 

function Character (nameCharac, id, hp, spell, owner) { 
    this.nameCharac = nameCharac; 
    this.id = id; 
    this.hp = new StatCharac(hp); 
    this.power = new StatCharac(0); 
    this.spell = spell; 
    this.pos = -1; 
    this.canMove = false; 
    this.canPlay = false; 
    this.owner = owner; 
} 


var character = new Character() 
console.log(character.hp.getVal) 

Это работает отлично.

0
console.log('message: ' + {name: 'character object', hp: new StatCharac(1)}.hp.getVal) 

Работы хорошо.

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