我正在学习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>
感谢。
答案 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