2012-04-01 9 views
2

나는 그렇게처럼 내 자바 스크립트 프로토 타입에 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 키워드를 처리하기 위해 인수를 사용하는 함수 였지만, 작은 자바 스크립트 라이브러리에 있기 때문에 프로토 타입으로 구현하고 싶습니다. 이 문맥에서 this 키워드가 맞습니까? 그렇지 않습니다. 프로토 타입에 오류가 있습니까? 감사.

+0

* ReferenceError가 : 배열 –

+0

@CrescentFresh 고정 * 정의되지 않은,하지만 테스트가 계속 실패합니다. 그것은 말합니다 :'TypeError : Object 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

관련 문제