2016-07-23 15 views
0

問題:私は2つのパラメータ取るウィザードという名前のコンストラクタ関数を作成しようとしている:名前と呪文をした後、ウィザードのオブジェクトを作成します。コンストラクタ関数の作成方法は?

「ウィザードの各特定のインスタンスは、名前プロパティを持っている必要があります(A string)、文字列の配列である呪文のプロパティ、文字列形式のランダムな呪文を返すことのできるcastSpellのメソッドです。 "

オブジェクトのプロパティは次のとおりです。nameは "Gorrok"(文字列)、呪文は "abracadabra"と "cadabraabra"(配列)です。

目的Gorrok:そうのようなランダムな呪文を表示するには、castSpellメソッドを呼び出すには

コード 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(); 

答えて

2

また、あなたが配列に残りの引数にあなたが持っている方法を変換することはできません1.

よりも大きくなることは決してないだろうので、だから、Math.random()は、0と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(); 
0

また、私はポールの答えが正解だと思います0または1ランダム

var v = Math.round(Math.random()); 
document.write(this.name + " : " + this.spells[v]); 
+0

、私はあなたがそこに何をしたかが好きです。 Math.round(Math.random())を使用する状況はまったく同じですか?そして、あなた自身の中で他の数学のクラスを使うことができますか? – ratboy

+0

'Math.random'は0と1の間の浮動小数点数を返します。' Math.round'はfloatを最も近い整数に丸めます。あなたはMath。{someFunction}の結果を使用するときに制限されません。 'var floatBetween0and1 = Math.random();のように書くことができます。 var number0or1 = Math.round(floatBetween0and1) ' – Freez

1

を取得するためにMath.round()を使用することができます。また、ctorにない関数については、プロトタイプを使用してください。プロトタイプでは、コンストラクタで定義されていないメンバ変数を追加することもできます。ここで

がW3からの例です:シャッフルするこの方法は私に新しかった

function Person(first, last, age, eyecolor) { 
    this.firstName = first; 
    this.lastName = last; 
    this.age = age; 
    this.eyeColor = eyecolor; 
} 
Person.prototype.nationality = "English"; 
+0

プロトタイプを使用すると、ほとんどのjavascriptランタイム環境でメモリ割り当てに追加の利点があることを指摘する価値があります。関数がコンストラクタで定義されると、関数の新しいインスタンスがオブジェクトの各インスタンスに割り当てられますが、このアンサーが完了したときにプロトタイプを使用すると、そのクラスのすべてのインスタンスに関数のコピーが1つだけ割り当てられます。 – Paul

関連する問題