问题:我正在尝试创建一个名为Wizard的构造函数,它接受2个参数:name和spells,然后创建一个Wizard对象:
“向导的每个特定实例都必须具有名称属性(字符串),spells属性是字符串数组,以及能够以字符串格式返回随机符号的castSpell方法。”
该对象具有以下属性:name是“Gorrok”(字符串),而spells是“abracadabra”和“cadabraabra”(数组)。
目标:调用castSpell方法显示一个随机拼写,如下所示: Gorrok:abracadabra
代码:到目前为止我只编写了以下代码,而且我已经陷入了这个阶段!
function Wizard(name, spells){
this.name = name;
this.spells = [spells];
this.castSpell = function(){
var v = Math.random();
if (v >= 1)
document.write(this.name + " : " + this.spells[0]);
else
document.write(this.name + " : " + this.spells[1]);
}
}
var w = new Wizard("Gorrok", "abracadabra", "cadabraabra");
w.castSpell();
答案 0 :(得分:2)
因此,Math.random()
将返回0到1之间的数字,因此它永远不会大于1.
此外,您无法按照自己的方式将剩余的参数转换为数组。
最简单的解决方法:
function Wizard(name, spells){
this.name = name;
this.spells = spells; // assume spells is already an array
this.castSpell = function(){
var v = Math.random();
if (v >= 0.5)
document.write(this.name + " : " + this.spells[0]);
else
document.write(this.name + " : " + this.spells[1]);
}
}
var w = new Wizard("Gorrok", ["abracadabra", "cadabraabra"]);
w.castSpell();
答案 1 :(得分:1)
我认为保罗的回答是正确的。此外,对于不在ctor中的功能,请使用原型。原型还允许您添加未在构造函数中定义的成员变量。
这是w3的一个例子:
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}
Person.prototype.nationality = "English";
答案 2 :(得分:0)
您还可以使用Math.round()
随机获得0或1
var v = Math.round( Math.random() );
document.write(this.name + " : " + this.spells[v]);