Javascript 我们可以直接在类中添加嵌套对象吗?正确的语法是什么?

Javascript 我们可以直接在类中添加嵌套对象吗?正确的语法是什么?,javascript,object,syntax,nested,Javascript,Object,Syntax,Nested,我开始从事web开发,几天前开始学习JavaScript。在这段代码中,我试图创建一个具有能力(包括炮弹)的“玩家”类。能力将是玩家类中的嵌套对象。炮弹将是能力对象的嵌套对象。当我尝试创建一个玩家时,我得到了一个“能力:{”语法错误,如果我完全破坏了所有东西的标题,很抱歉。一般来说,我只花了几天时间编写代码 class player { constructor(name,phrase) { this._name = name; this._catchPhrase = phra

我开始从事web开发,几天前开始学习JavaScript。在这段代码中,我试图创建一个具有能力(包括炮弹)的“玩家”类。能力将是玩家类中的嵌套对象。炮弹将是能力对象的嵌套对象。当我尝试创建一个玩家时,我得到了一个“能力:{”语法错误,如果我完全破坏了所有东西的标题,很抱歉。一般来说,我只花了几天时间编写代码

class player {
  constructor(name,phrase) {
    this._name = name;
    this._catchPhrase = phrase;
  }
  get name() {
    return this._name;
  }
  abilities: {
    cannonball: {
      damage: 20;
    }
  }
}

经过一些实验,我发现这个语法是有效的!如果可能的话,有人能批评一下吗?基本上这个类应该包含名称、标语、两种能力(不同的对象包含伤害和数量)

谢谢大家!

class player {
  constructor(name,phrase) {
    this._name = name;
    this._catchPhrase = phrase;
    this._abilities = {
      _cannonball: {
        _damage: 20,
        _currAmount: 3,
      },
      _arrows: {
        _damage: 10,
        _currAmount: 10,
      }
    }
  }
}

您可以使“能力”属性按如下所示工作。有关详细信息,请参阅代码中的注释。
(关于所有与网络相关的思考,请尽早且经常参考。)

class播放器{//按惯例使用首字母大写
构造函数(名称、短语){
这个。_name=name;
这是流行语;
//将“能力”属性添加到玩家的所有实例中
这是我的能力={
//能力是一个具有炮弹属性的对象
炮弹:{
//炮弹是一种具有伤害属性的物体
损坏:20//对象文字中没有分号
}
};
}
获取名称(){
返回此。\u名称;
}
}
//成为一名新球员,并显示她的能力包括“炮弹”`
康斯特玩家=新玩家(“奶奶”,“拿着我的啤酒!”);
对于(让Object.keys的道具(player.abilities)){
控制台日志(玩家能力[prop]);

}
Javascript没有类似于
类播放器{abilities:{…}}
的语法

你可以将你的
能力
对象绑定到construtor上的玩家实例,或者改用
getter

// example
class player {
    constructor(name, phrase) {
        this._name = name;
        this._catchPhrase = phrase;
        // your abilities object
        this.abilities = {
            cannonball: {
                damage: 20;
            }
        }
    }

    // or use getter
    get abilities() {
        return {
            cannonball: {
                damage: 20;
            }
        }
    }
}

如果你真的需要像Java这样的嵌套类解决方案,请参阅Lorenzo Polidori的答案。

这是我问这个问题的最后一个小项目。我正在学习Javascript的第4天,这是我得到的最好的解决方案。再次感谢你

class player {
  constructor(name,phrase) {
    this._name = name;
    this._catchPhrase = phrase;
    this._health = 100;
    this._abilities = {
        _cannonball: {
          _damage: 20,
          _currAmount: 3,
        },
        _arrows: {
          _damage: 10,
          _currAmount: 10,
        },
    }
  }
  set lowerCannon(lowerBy) {
    this._abilities._cannonball._currAmount -= lowerBy;
  }
  set lowerArrows(lowerBy) {
    this._abilities._arrows._currAmount -= lowerBy;
  }
  set lowerHealth(lowerBy) {
    this._health -= lowerBy;
    if (this._health <= 0) {
      this._health = 0;
    }
  }
}

//shooting functions that lower current amount
var shootCannon = (playerTurn,playerHit) => {
  if (playerTurn._health === 0 || playerHit._health === 0)
  {
    //console.log('Game has already ended!')
  }
  if (playerTurn._abilities._cannonball._currAmount === 0) {
    console.log(`${playerTurn._name} is out of Cannonballs!`)
    shootArrows(playerTurn,playerHit);
  }
  else {
  playerTurn.lowerCannon = '1';
  playerHit.lowerHealth = playerTurn._abilities._cannonball._damage;
  console.log(`${playerTurn._name} has fired a cannonball dealing ${playerTurn._abilities._cannonball._damage} damage!...`);
  console.log()
  console.log(`${playerHit._name}'s health is now at ${playerHit._health}!`);
  console.log()
  }
}
var shootArrows = (playerTurn,playerHit) => {
  if (playerTurn._health === 0 || playerHit._health === 0)
  {
    //console.log('Game has already ended!')
  }
    if (playerTurn._abilities._arrows._currAmount === 0) {
    console.log(`${playerTurn._name} is out of arrows!`)
    shootCannonball(playerTurn,playerHit);
  }
  else {
  playerTurn.lowerArrows = '1';
  playerHit.lowerHealth = playerTurn._abilities._arrows._damage;
  console.log(`${playerTurn._name} has fired arrows! dealing ${playerTurn._abilities._arrows._damage} damage!...`);
  console.log()
  console.log(`${playerHit._name}'s health is now at ${playerHit._health}!`);
  console.log()
  }
}

//Make computer fight each other functions
var randomAttack = (playerTurn,playerHit) =>{
  index = Math.floor(Math.random()*2);
  if (index === 1) {
    return shootArrows(playerTurn,playerHit);
  }
  else {
    return shootCannon(playerTurn,playerHit);
  }
}
var botMatch = (playerTurn,playerHit) => {
  if (playerTurn._health <= 0 || playerHit._health <= 0) {
    if (playerTurn._health > playerHit._health) {
      console.log(`${playerTurn._name} has won!`)
    }
    if (playerTurn._health < playerHit._health) {
      console.log(`${playerHit._name} has won!`)
    }
    console.log('Game Over!')
  }
  else {
    randomAttack(playerTurn,playerHit);
    randomAttack(playerHit,playerTurn);
    botMatch(playerTurn,playerHit);
  }
}

const player1 = new player('Juan','Let\'s Go!');
const player2 = new player('Jaileth','Beep Beep');

botMatch(player1,player2);
职业玩家{
构造函数(名称、短语){
这个。_name=name;
这是流行语;
这是._health=100;
这是.\u能力={
_炮弹:{
_损失:20,
_金额:3,
},
_箭头:{
_损失:10,
_金额:10,
},
}
}
设置下坎农(下坎农){
这个。_能力。_炮弹。_currAmount-=lowerBy;
}
设置较低的行(较低的行){
这个。_能力。_箭头。_currentmount-=lowerBy;
}
设置较低的高度(较低){
这._health-=lowerBy;
如果这是健康问题{
if(playerTurn.|u health==0 | | playerHit._health==0)
{
//console.log('游戏已经结束!')
}
如果(玩家翻转能力、炮弹数量===0){
log(`${playerTurn.\u name}没有炮弹了!`)
射箭(弹手弹、弹手弹);
}
否则{
playerTurn.lowerCannon='1';
playerHit.lowerHealth=玩家翻转。\技能。\炮弹。\伤害;
log(${playerTurn.\u name}发射了一个炮弹,造成${playerTurn.\u异能.\u炮弹.伤害}伤害!…);
console.log()
log(`${playerHit.\u name}的运行状况现在为${playerHit.\u health}!`);
console.log()
}
}
var shootArrows=(playerTurn,playerHit)=>{
if(playerTurn.|u health==0 | | playerHit._health==0)
{
//console.log('游戏已经结束!')
}
如果(玩家翻转能力箭头数量===0){
log(`${playerTurn.\u name}已超出箭头范围!`)
射击炮弹(弹手旋转,弹手旋转);
}
否则{
playerTurn.lowerArrows='1';
playerHit.lowerHealth=玩家翻转。\技能。\箭头。\伤害;
log(${playerTurn.\u name}已经发射了箭头!处理${playerTurn.\u能力.\u箭头.\u伤害}伤害!…`);
console.log()
log(`${playerHit.\u name}的运行状况现在为${playerHit.\u health}!`);
console.log()
}
}
//使计算机具有相互竞争的功能
var randomAttack=(playerTurn,playerHit)=>{
索引=Math.floor(Math.random()*2);
如果(索引==1){
返回射箭(playerTurn,playerthit);
}
否则{
回击炮(弹手弹、弹手弹);
}
}
var botMatch=(playerTurn,playerHit)=>{

if(playerTurn.\u health我相信,这不是一个嵌套对象,而是一个嵌套类吗?是的,看起来差不多。嘿,猫!非常感谢你的输入!如果你感兴趣,这里是我为自己设置的最后一个简单项目。(目前正在学习JavaScript的第4天),我相信有更好的方法来编写这个小程序…但这是我得到的最好的(现在!)而且,我是stackoverflow的新手,如果在这上面格式化太尴尬,我深表歉意lol