2012-03-11 59 views
4

我正在学习javascript。我只想了解为什么在下面的代码strip2()函数不起作用,并返回一个错误。Uncaught TypeError:Object [object DOMWindow] has no method'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

感谢。我会读一些关于这个指针的文章。 – kinakomochi 2012-03-11 13:07:06

2

正确的版本是:

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

谢谢。有效。 – kinakomochi 2012-03-11 13:07:22

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

这也工作!谢谢。 – kinakomochi 2012-03-12 08:57:06

1

在JavaScript中这始终是指我们执行,或者说功能的“所有者”,对象是一个函数的方法的。

所以strip2呼吁更换全球window对象。

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

+0

谢谢,这真的很有帮助。我会读这一个。 – kinakomochi 2012-03-12 09:01:49

相关问题