我创建了一个构造函数,可以创建简单的视频游戏角色。构造函数将name
作为参数并设置为属性hName
。构造的对象具有其他属性,例如speed
,defaultEnergy
,energyUsed
等等(请参阅代码)。另外,我在构造函数description
和energyLevel
中有两个方法。我想使用energyLevel
函数作为description
函数的回调。
解析错误在this.hName: name,
以下是JavaScript代码:
var superHero = function (name) {
this.hName: name,
speed: 7,
defaultEnergy: 20,
energyUsed: 10,
flyAbility: true,
description: function (energyLevel) {
document.write(this.name + " has the capability to hold the hummer.");
energyLevel();
},
energyLevel = function () {
return ("<br>Current energy level is " + (this.defaultEnergy - this.energyUsed));
}
};
hero = new superHero("Thor");
document.write(hero.description());
我想要以下结果:
托尔有能力控制悍马。当前能量水平为10
我知道,不使用回调函数就可以轻松实现。但我希望通过回调实现它,因为我需要在我的其余项目中使用它,并且还将帮助我理解为什么回调不起作用。
答案 0 :(得分:3)
当您致电new Foo
时,会为您创建一个对象并可从您的函数正文中访问。要向 对象添加属性,请使用关键字this
:
function SuperHero ( name ) {
this.hName = name;
}
var hero = new SuperHero( "Thor" );
console.log( `Name: ${hero.hName}.` );
您可能还想将大部分内容放在函数的原型上:
function SuperHero ( name ) {
this.hName = name;
this.energyLevels = 10;
}
SuperHero.prototype = {
energyLevel: function () {
document.write( `Current energy level is ${this.energyLevels}.` );
},
description: function ( energyLevel ) {
document.write( `${this.hName} has a description.` );
this.energyLevel();
}
};
放置在SuperHero.prototype
对象上的项目将在SuperHero的所有实例之间共享。
如需进一步阅读,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new#Description。
答案 1 :(得分:1)
每个属性都需要更改为
var superHero = function (name) {
this.hName = name;
this.description = function (energyLevel) {
document.write(this.name + " has the capability to hold the hummer.");
energyLevel();
};
};
您尝试做的是为对象创建,但如果您想创建构造函数则不行。
答案 2 :(得分:1)
您尝试分配值的方式并不奏效。尝试改写:
var superHero = function (name) {
this.name = name;
this.speed = 7;
this.defaultEnergy = 20;
this.energyUsed = 10;
this.flyAbility = true;
};
superHero.prototype = {
description: function (energyLevel) {
document.write(this.name + " has the capability to hold the hummer.");
document.write(this.energyLevel());
},
energyLevel : function () {
return ("<br>Current energy level is " + (this.defaultEnergy - this.energyUsed));
}
}
var hero = new superHero("Thor").description();
答案 3 :(得分:1)
您想要创建superHero
课程吗?对于类方法使用prototype
,在内部变量的构造函数中使用this.mymember = value;
。例如:
// class superHero
var superHero = function superHero(name) {
this.hName = name;
this.speed = 7;
this.defaultEnergy = 20;
this.energyUsed = 10;
this.flyAbility = true;
};
superHero.prototype.description = function description() {
document.write(this.hName + " has the capability to hold the hammer.");
return this.energyLevel();
};
superHero.prototype.energyLevel = function energyLevel() {
return "<br>Current energy level is " + (this.defaultEnergy - this.energyUsed);
};
// Example
var hero = new superHero("Thor");
document.write(hero.description());
&#13;
答案 4 :(得分:1)
此对象完全无效。您需要在函数或对象文字之间进行选择,然后将这两者混合在一起。
使用对象文字,你可以这样做:
var superHero = {
name: null,
speed: 7,
defaultEnergy: 20,
energyUsed: 10,
flyAbility: true,
description: function (energyLevel) {
document.write(superHero.name + " has the capability to hold the hummer.");
superHero.energyLevel();
},
energyLevel: function () {
return ("<br>Current energy level is " + (superHero.defaultEnergy - superHero.energyUsed));
}
};
//hero = new superHero("Thor");
superHero.name = "Thor";
superHero.description(10);
使用函数/类可以执行此操作:
var superHero = function(name) {
self = this;
this.name= name;
this.speed= 7;
defaultEnergy= 20;
energyUsed = 10;
flyAbility = true;
this.description = function (energyLevel) {
document.write(self.name + " has the capability to hold the hummer.");
self.energyLevel();
};
this.energyLevel = function () {
return ("<br>Current energy level is " + (selfHero.defaultEnergy - self.energyUsed));
};
};
hero = new superHero("Thor");
hero.description(10);
如果它有助于您将对象文字视为静态对象实例,并将函数视为动态实例,则可以创建更多。
答案 5 :(得分:0)
你必须使用“&#39;这个&#39;显示您正在使用构造函数的当前实例的属性和方法。
this.hName = name;
当你在里面调用方法时......
this.energyLevel();