this的含义
由于JavaScript 有运行期绑定的特性,JavaScript 中的 this 含义不是固定的,它可以是全局对象、当前对象或者任意其他对象,这完全取决于函数的调用方式。
随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。
(1)在函数被直接调用时,this绑定到全局对象。在浏览器中,window 就是该全局对象。
(2)函数作为构造函数被调用,就是通过这个函数new一个新对象。这时this就指这个新的对象。
<script>
function F1(){
var name = "GD";
console.log("测试:"+this.name);
}
function Test(){
//函数直接被调用
//this = window,this.name="",因为没有给window指定name啊;
F1();
//函数作为构造函数被调用
//this = object,this.name = "",因为var定义的name变量和this.name不是同一个变量,只是名称相同而已;
var f = new F1();
}
</script>
(3)函数作为内部函数被调用,this不是其父函数,仍然是全局变量。
<script>
function F1(){
console.log("测试1:"+this);
function innerTest(){
console.log("测试2:"+this);
}
return innerTest;
}
function Test(){
var inner = F1();
//内部函数innerTest里面的this = window
inner();
}
</script>
(4)函数作为某对象的方法被调用,里面的this指当前对象。在 JavaScript 中函数也是对象。因此函数可以作为一个对象的属性。
<script>
function Test(){
var obj1 = {
name: 'Byron',
fn : function(){
console.log(this);
}
};
//函数作为对象方法,里面的this = 当前对象
obj1.fn();
//函数作为对象方法,如果单独调用,里面的this = window
var fn2 = obj1.fn;
fn2();
}
</script>
总而言之,随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。