2012-04-01 10 views
2

私はそうのように私のJavascriptのプロトタイプでthisを使用しよう:Javascriptでこのキーワードをプロトタイプで使用していますか?

Array.prototype.sample = function() { 
    return this[Math.floor (Math.random() * this.length)]; 
} 

としてだけでなく、私のテストを実施(Jasmine):

describe('sample()', function() { 
    it('returns a random item of an array', function() { 
    orig_array = ['foo', 'bar', 'baz', 'qux']; 
    sampled_word = orig_array.sample(); 
    expect(orig_array).toContain(sampled_word); 
    }); 
}); 

私のテストが失敗しました。これらのメソッドは元々、プロトタイプの中のthisキーワードを処理するための引数を使用する関数でしたが、小さなJavascriptライブラリにあるため、プロトタイプとして実装したいと考えていました。この文脈でthisというキーワードが正しいのですか、あるいは私が取得していないプロトタイプにエラーがありますか?ありがとう。

+0

*にReferenceError:配列は –

+0

@CrescentFreshが固定*定義されていませんが、テストはまだ失敗しています。それは言う: 'TypeError:オブジェクトfoo、bar、baz、quxメソッド 'sample''がありません。 – beakr

+0

あなたの質問を修正して、更新されたコードを表示してください。 – kojiro

答えて

2

問題はコードのこの部分にあります。

Array.prototype.sample = function() { 
    return this[Math.floor (Math.random() * array.length)]; 
} 

単に「配列」が定義されていません。動作するはずのコードがある

Array.prototype.sample = function() { 
    return this[Math.floor (Math.random() * this.length)]; 
} 
+0

問題が解決され、同じファイルにある以前のコードの複数のエラーが発生しました。すぐに再開する必要があります。助けてくれてありがとう。 – beakr

関連する問題