2012-03-11 8 views
4

저는 자바 스크립트를 연구 중입니다. 난 왜 아래 코드에서 strip2() 함수가 작동하지 않는지 이해하고 오류를 반환합니다.잡히지 않은 TypeError : Object [object DOMWindow]에 'replace'메서드가 없습니다.

<script type="text/javascript"> 
function strip1(str) { 
    return str.replace(/^\s+|\s+$/g, "") 
}; 
function strip2() { 
    return this.replace(/^\s+|\s+$/g, "") 
}; 

var text = ' Hello '; 
console.log(strip1(text)); // Hello 
console.log(strip2(text)); // Uncaught TypeError: Object [object DOMWindow] has no method 'replace' 
</script> 

감사합니다.

답변

4

this은 전역 문자 window 개체에 대한 포인터이며 replace 함수가 없습니다 (문자열이 아니기 때문에). 따라서 결과적으로 오류가 발생합니다.

+0

감사 :

는 참고로,이 자바 스크립트에서 this 키워드를 설명하는 글이다. 이 포인터에 대한 기사를 읽겠습니다. – kinakomochi

2

올바른 버전은 다음과 같습니다

console.log(strip2.call(text)); 
자바 스크립트에서
+0

감사합니다. 그것은 효과가 있었다. – kinakomochi

1
function strip2() { 
    return arguments[0].replace(/^\s+|\s+$/g, "") 
}; 
+0

이것도 작동했습니다! 감사. – kinakomochi

1

이 항상 함수는 방법이라는 객체에, 우리는 실행, 또는 오히려하고있는 함수의 "주인"을 의미 의.

그래서 strip2는 글로벌 window 개체에서 replace를 호출합니다. http://www.quirksmode.org/js/this.html

+0

감사합니다. 정말 도움이됩니다. 나는 이것을 읽을 것이다. – kinakomochi

관련 문제