JavaScript构造函数在定义属性

时间:2016-02-11 23:10:06

标签: javascript callback

我创建了一个构造函数,可以创建简单的视频游戏角色。构造函数将name作为参数并设置为属性hName。构造的对象具有其他属性,例如speeddefaultEnergyenergyUsed等等(请参阅代码)。另外,我在构造函数descriptionenergyLevel中有两个方法。我想使用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

我知道,不使用回调函数就可以轻松实现。但我希望通过回调实现它,因为我需要在我的其余项目中使用它,并且还将帮助我理解为什么回调不起作用。

6 个答案:

答案 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();

DEMO

答案 3 :(得分:1)

您想要创建superHero课程吗?对于类方法使用prototype,在内部变量的构造函数中使用this.mymember = value;。例如:

&#13;
&#13;
// 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;
&#13;
&#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();