javascript - 对象中的函数引用对象中的属性,不加this引用不到
本文介绍了javascript - 对象中的函数引用对象中的属性,不加this引用不到的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
1.下面这种写法,在aa函数中可以取到t的值
var a = {
t:3,
aa: function(){
alert(this.t);
}
};
a.aa() //3
2.但是下面这种写法就不行
var a = {
t:3,
aa: function(){
alert(t);
}
};
a.aa() //找不到t
我理解在第二种写法上,aa中的this==a,那么在函数aa中作用链0中找不到t,应该会继续在aa的作用链继续向上找,会在a中找到t这个属性的啊?看样子程序在运行的时候没有向上找?
我的问题是:
为何a中的函数中引用a的对象,必须要加this? 不加为何引用不到?
明白了,其实第二种情况的t是window.t,而不是我之前理解的this.t
解决方案
你这里混淆了三个概念:属性查找(原型链),变量查找(作用域链)和this关键字
第一种情况a.aa()
为什么能打印3。这里是this关键字和属性查找问题。this指代调用该函数(aa)的对象,即a,而a对象又是有t属性的,并且值为3,所以打印出3。
第二种情况a.aa()
中的alert(t)
为什么找不到t。这里是变量查找,和this和原型链没有半毛钱关系,因此不可能涉及到a的t属性的问题。那么问什么a.aa()
种找不到t变量,请看这个函数的作用域:
函数本身的参数,无
函数内部定义的局部变量,无
函数所在作用域下(全局作用域)下是否有定义t变量,也无
那就肯定找不到t了呀
这篇关于javascript - 对象中的函数引用对象中的属性,不加this引用不到的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文