我希望我的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)
})
}
}
答案 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
}