this对象

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012194956/article/details/80606652

this对象是在运行时基于函数的执行环境绑定的:

1)在全局函数中,this等于window

2)当函数被作为某个对象的方法调用时,this等于那个对象

3)匿名函数的执行环境具有全局性,因此其this对象通常指向window(通过call和apply可以改变this的指向)

下面来看一些例子:

var name="Window";
var obj={
	name:"Object",
	getName:function(){
		return function(){
			return this.name;
		};
	}
}

上面的代码中,我们首先创建了一个全局变量name,其值为“Window”,又创建了一个包含name属性的对象,且该对象中还有一个方法getName(),这个方法返回一个匿名函数,而匿名函数又返回this.name。

现在,我们来调用getName方法内部的匿名函数:


JavaScript高程一书中对于这个的解释是这样的:每个函数在被调用时,其活动对象都会自动取得两个特殊变量:this和arguments。内部函数在搜索这两个变量的时候,只会搜索到其活动对象为止,因此永远不可能直接访问外部函数中的这两个变量。

如果想获得obj对象中的name值,可以这样:

var name="Window";
var obj={
	name:"Object",
	getName:function(){
		var that=this;
		return function(){
			return that.name;
		}
	}
}

在定义匿名函数之前,我们把this对象赋值给一个名为that的变量,这里的that则引用着obj,调用obj方法内部的匿名函数:


在一些特殊情况下,this的值可能会发生改变:

var name="Window";
var obj={
	name:"Object",
	getName:function(){
		return this.name;
	}
}

以下集中调用方式返回的结果有区别:


第一行是正常调用了对象obj的方法getName()

第二行在调用这个方法之前给它加上了一个括号,表示引用一个函数

第三行先执行了一个赋值语句,然后再调用赋值后的结果








猜你喜欢

转载自blog.csdn.net/u012194956/article/details/80606652