所以我正在尝试编写一个简单的游戏来处理对象,并习惯于操纵和使用它们。我想要做的是设置基本统计数据(用户/程序员定义),然后在方法中使用这些基本统计数据来创建复杂的统计数据。我正在尝试做的示例代码:
var main = function() {
function Boss (name, lvl, str, dex, int) {
this.bName = name
this.level = lvl
this.strength = str
this.dexterity = dex
this.intelligence = int
this.pAttack = pAttack();
}
function pAttack() {
(2*this.level) + (2*this.strength);
}
var a1Boss = new Boss("test", 50, 500, 500, 500)
console.log(a1Boss.pAttack)
}
这会将undefined返回给控制台,尽管其他所有内容都会正确返回。应该将pAttack功能设置为
var pAttack = function() {code}
任何帮助将不胜感激
答案 0 :(得分:1)
如果您希望将方法附加到新对象,请执行以下操作:
this.pAttack = pAttack;
// and the function should be initialized as a variable
var pAttack = function(){...};
如果您希望将方法附加到原型上:
Boss.prototype.pAttack = pAttack;
答案 1 :(得分:0)
目前pAttack
实例的上下文中未调用Boss
,因此this
未指向您的预期,您有3个选项
在所有情况下,请勿忘记return
功能中的pAttack
!
选项1 ,让实例继承pAttack
定义pAttack
后,添加以下内容
Boss.prototype.pAttackFn = pAttack;
这是做什么的?
它使Boss
的所有实例,即由new Boss
构造的对象继承函数pAttack
作为属性pAttackFn
,因此您可以调用它,例如
this.pAttack = this.pAttackFn();
选项2 ,使用.call
或.apply
this.pAttack = pAttack.call(this);
选项3 ,提供pAttack
个参数,而不是依赖this
function pAttack(lvl, str) {
return (2 * lvl) + (2 * str);
}
然后
this.pAttack = pAttack(this.level, this.strength);
答案 2 :(得分:0)
您的函数需要返回一个值。我会将它创建为对象的方法,然后将其称为:
var main = function() {
function Boss(name, lvl, str, dex, int) {
this.bName = name;
this.level = lvl;
this.strength = str;
this.dexterity = dex;
this.intelligence = int;
this.pAttack = function() {
return (2 * this.level) + (2 * this.strength);
}
}
var a1Boss = new Boss("test", 50, 500, 500, 500);
console.log(a1Boss.pAttack());
};
main(); // outputs '1100' to the console
答案 3 :(得分:0)
很多语法错误。
function Boss (name, lvl, str, dex, int) {
this.bName = name;
this.level = lvl;
this.strength = str;
this.dexterity = dex;
this.intelligence = int;
this.pAttack = this.pAttack();
}
Boss.prototype = {
pAttack: function () {
return (2*this.level) + (2*this.strength);
},
pDefend: function () {
//Defend stuff
},
levelUp: function () {
this.level = this.level + 1;
}
};
var a1Boss = new Boss("test", 50, 500, 500, 500);
console.log(a1Boss.pAttack)
答案 4 :(得分:0)
您实际上已执行方法pAttack
而非分配方法。由于pAttack
不返回任何内容,因此会返回undefined
作为替代。
所以不要执行它,
this.pAttack = pAttack;
或返回一些东西
function pAttack() {
return (2*this.level) + (2*this.strength);
}
答案 5 :(得分:0)
根据你从长远来看做的事情可能会有所帮助的另一个解决方案是将参数传递给你的函数,并返回该值。
function pAttack(level, strength) {
return (2*level) + (2*strength);
}
并用
调用它this.pAttack = pAttack(this.level, this.strength);