理解js中的this对象

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">	</span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">关于this对象,一直不是很好理解,我也经常被困惑,因为this对象经常会因为代码书写的方式不同而导致似乎自己认知中的this对象被改变了,但实际上this还是那个this。一句话:“this 对象是函数在运行时基于函数的执行环境而绑定的”。如在全局环境中执行的函数,this就等于window,而当使用object调用函数时this就执行了这个object。</span>

好了,接下来就说说上面说的“因为代码书写的不同,而导致的this对象不好理解”,看看下面一段代码:

var name = "window's name";
var object = {
	name:"object's name",
	getFunc:function(){
		return function(){
			this.name;
		}
	}
}
console.log(object.getFunc()());//"window's name"
执行上面的函数结果是window's name。对于这个结果,懂的人一下就理解了,但是我刚开始,没懂。现在想想也理解了。

解释:函数被调用的时候都会取得this和arguments。但是就像作用域链一样函数向外开始搜索时,当搜索到自己的活动对象时,就停止了,而这个函数中this活动对象就是window,所以就出现了如上结果。

解决办法:利用闭包,将this保存在一个变量中

var name = "window's name";
var object = {
	name:"object's name",
	getFunc:function(){
<span style="white-space:pre">		</span>var that = this;
		return function(){
			that.name;
		}
	}
}
console.log(obj.getFunc()());//"object's name"
这个时候达到了我们想要的结果。

最后再写一下意想不到的this

var name = "window's name";
var object = {
	name:"object's name",
	getName:function(){
		return this.name;
		
	}
}
console.log(obj.getName());//"object's name"
<pre name="code" class="html">console.log((obj.getName)());//"object's name"
console.log((obj.getName = obj.getName)());//"window's name"

 对于第一行代码无疑问。第二行代码相当于引用一个函数,结果不变。而第三行先将函数变量赋值给了他自己,在调用结果发生了变化,这就是意外变化了,我没想明白是为什么。 



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值