将值从类方法作为参数传递给同一类中的另一个方法-JS

时间:2019-12-26 20:58:40

标签: javascript class

我希望我的get_hero()类方法采用随机数作为参数。

有没有一种方法可以将random_hero_id()中的值作为参数获取,这是好事还是坏事?

random_hero_id()将创建并返回一个随机数。 get_hero()将通过fetch方法获取URI并返回一些值。

export default class Player {

  constructor(name, hero_info) {
    this.name = name;
    this.hero_info = hero_info;
    console.log(this.asd)
  }
    // rols the dice and returns a number between 1 - 6, has nothing to do with random_hero_id() or get_hero()
   rollDice() {
    let RandomNumber = Math.floor((Math.random() * 6 + 1 ));
    console.log(RandomNumber)
    return RandomNumber
  }

  random_hero_id() {
    var random_number = Math.floor((Math.random() * 244 + 1));
    console.log(random_number);
    return random_number
  }

  // fetches a random hero and displays some attributes / right now it's only the powerstats
  // I would like this method to take the returned value from the above method random_hero_id()
  get_hero(rand_number) {
    const api_key = '10156555926000957';
    let hero_id = rand_number;
    let hero_url = `https://www.superheroapi.com/api/${api_key}/${hero_id}`;
    console.log(hero_url)
    fetch(hero_url)
    .then(res => { 
      return res.json();
    })
    .then( data => {
      const ps = data.powerstats;

      const power_stats = document.getElementById(this.hero_info);

      power_stats.innerHTML = "";

      const list = document.createElement(`ul`)
      power_stats.appendChild(list)

      Object.entries(ps).forEach(([key, value]) => {
        const smt = document.createElement(`li`)
        smt.innerText = `The heroes ${key} is ${value}`
        list.appendChild(smt)
      })

    })
    .catch(function(err ) {
      console.log('error is ' + err)
    })
  }
}

2 个答案:

答案 0 :(得分:1)

  

有没有一种方法可以将random_hero_id()的值作为参数获取

是的,您只需要使用返回值get_hero来调用random_hero_id,就像这样:

get_hero(random_hero_id())
  

这是好事还是坏事?

这更多是一种观点,但是如果get_hero总是 要获得一个随机英雄,那么在{{1} }?看来get_hero是更通用的用法,旨在通过ID获得某些实体。如果要经常执行此操作,创建一个名为get_hero的函数来封装此逻辑可能会更清楚:

get_random_hero

那样,get_random_hero () { return get_hero(random_hero_id()) } 仍然是通用的。

答案 1 :(得分:1)

您可以在this.random_hero_id中添加random_hero_id()来存储随机英雄ID,然后在get_hero()中只需使用this.random_hero_id(但请务必始终调用random_hero_id()get_hero()之前。或直接在构造函数上调用random_hero_id()

  

是否可以从random_hero_id()中获取值作为一个好习惯或坏习惯?

我认为这不是一个好习惯,调用者不必存储ID,玩家对象必须在内部存储它,因此在创建玩家时生成ID是最好的选择,然后可以为此ID使用getter函数。

因此您可以执行以下操作:

constructor(name, hero_info) {
    this.name = name;
    this.hero_info = hero_info;
    this.hero_id = random_hero_id();
}

// ...

get_hero() {
    // You can access hero id with this.hero_id
}