Используя это ключевое слово в Javascript с прототипами? - PullRequest
2 голосов
/ 01 апреля 2012

Когда я пытаюсь использовать 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 в этом контексте, или есть ошибка с прототипом, который я не получаю?Спасибо.

1 Ответ

2 голосов
/ 01 апреля 2012

Проблема в этой части кода.

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

Просто «массив» не определен. Код, который должен работать:

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