未捕获的TypeError:对象[object DOMWindow]没有方法'replace'

时间:2012-03-11 11:16:20

标签: javascript

我正在学习javascript。我只是想了解为什么下面代码中的strip2()函数不起作用,并返回错误。

<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 个答案:

答案 0 :(得分:4)

该上下文中的

this是指向全局window对象的指针,该对象没有替换函数(因为它不是字符串)。因此,它会引发错误。

答案 1 :(得分:2)

正确的版本是:

console.log(strip2.call(text));

答案 2 :(得分:1)

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

答案 3 :(得分:1)

在JavaScript中,这总是指我们正在执行的函数的“所有者”,或者更确切地说,指向函数是其方法的对象。

因此strip2在全局window对象上调用replace。

供参考,这是一篇解释JavaScript中this关键字的文章:http://www.quirksmode.org/js/this.html