如何创建构造函数?

时间:2016-07-23 19:45:48

标签: javascript function object

问题:我正在尝试创建一个名为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();

3 个答案:

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