2012-03-11 19 views
4

私はJavaScriptを勉強しています。私はちょうど以下のコードのstrip2()関数がうまくいかない理由を理解したいと思って、エラーを返します。Uncaught TypeError:オブジェクト[オブジェクト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オブジェクト(これは文字列ではないため置換機能を持たない)へのポインタです。その結果、エラーが発生します。

+0

ありがとう:

は参考のために、これはJavaScriptでthisキーワードを説明する記事です。私はこのポインタに関するいくつかの記事を読むでしょう。 – kinakomochi

2

正しいバージョンは次のようになります。JavaScriptで

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

関連する問題