Javascript的this用法

this作为js语言的一个关键字,表示函数运行时自动生成的一个内部对象,只能在函数内部使用。

情况1:纯粹的函数调用

function test(){
  this.x = 1;
  alert(this.x);
}
test(); // 1

//为了证明this就是全局对象,对代码做一些改变
var x = 1;
function test(){
  alert(this.x);
}
test(); // 1

//再变
var x = 1;
function test(){
  this.x = 0;
}
test();
alert(x); //0

情况2:作为对象方法调用

//函数还可以作为某个对象的方法调用,这时this就指这个上级对象。
function test(){
  alert(this.x);
}
var o = {};
o.x = 1;
o.m = test;
o.m(); // 1

情况3:作为构造函数调用

//所谓构造函数,就是通过这个函数生成一个新对象(object)。这时,this就指这个新对象

function test(){
  this.x = 1;
}
var o = new test();
alert(o.x); // 1

//为了证明this不是全局对象,对代码做一些改变

var x = 2;
function test(){
  this.x = 1;
}
var o = new test();
alert(x); //2

情况4:apply/call调用

var x = 0;
function test(){
  alert(this.x);
}
var o={};
o.x = 1;
o.m = test;
o.m.apply(); //0
//apply的参数为空时,默认调用全局对象。若有值,this指向该对象

o.m.apply(o); //1

最后看下几个较为复杂的例子,巩固下理解

//1
var name = "the window";
var object={
	name:"my object",
	getNameFunc : function(){
		return function(){
			return this.name;
		};
	}
};
var func = object.getNameFunc();
console.log(func())//"the window"

//2
var name = "the window";
var object={
	name:"my object",
	getNameFunc : function(){
		var that = this;
		return function(){
			return that.name;
		};
	}
};
var func = object.getNameFunc();
console.log(func())//"my object"

//3
var name = "the window";
var object={
	name:"my object",
	getNameFunc : function(){
		return function(){
			return this.name;
		};
	}
};
var obj = {};
obj.name = "obj name"
obj.func = object.getNameFunc();
console.log(obj.func());//"obj name"

总结:

1.函数在被直接调用的时候,其中的this指针永远指向window
2.匿名函数this总是指向window对象
3.谁执行函数,this就指向谁
4.如果函数通过new创建,则this指向新建出来的对象

 

转载于:https://my.oschina.net/kimyeongnam/blog/861379

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值