为什么this
未指向下面代码中的js全局范围?
<html>
<head></head>
<body>
<script type="text/javascript">
var valueHolder = {
value: '',
setValue: function(newValue) {
this.value = newValue;
},
getValue: function() {
return this.value;
}
}
valueHolder.setValue("hello world");
alert(valueHolder.getValue()); // return "hello world"
alert(valueHolder.value); // return "hello world"
alert(window.value); // return "undefined"
</script>
</body>
</html>
答案 0 :(得分:2)
它返回undefined,因为value是对象内部的键,在window对象中不可见。你将使用
访问window.valueHolder.value
(很明显,在您的代码中this
关键字指的是valueHolder对象)
答案 1 :(得分:2)
取决于对函数的引用(the spec的c.f. 11.2.3):
var valueHolder = {
value: '',
setValue: function(newValue) {
this.value = newValue;
},
getValue: function() {
return this.value;
}
}
var set = valueHolder.setValue,
get = valueHolder.getValue;
set('test');
alert(get()); // return "test"
alert(valueHolder.value); // return ""
alert(window.value); // return "test"
在上下文中引用时, this
设置为相关上下文(示例中为valueHolder
)。在上面的示例中,函数定义明显相同,但函数引用不在任何对象的上下文中,在这种情况下,this
设置为全局上下文(window
)。
答案 2 :(得分:0)
为什么你认为这将是全球范围?
当一个对象具有一个引用一个函数的属性,并使用点符号调用该函数时,如下所示:
valueHolder.getValue();
然后在函数JavaScript中自动将this
设置为对象。