基本上我试图理解并在JavaScript中学习'this'关键字的工作原理。
据我所知,'this'指的是当时内部的对象(函数)。
因此,相信这一点,我想测试下面简单代码的输出:
<body>
<input type="button" value="Add Age" onclick="Outer()" />
<script type="text/javascript">
function Outer(){
if(typeof this.Father == 'undefined')
{
this.Father = 0;
}
this.Father+=2;
alert(this.Father);
inner();
function inner(){
if(typeof this.Son== 'undefined')
{
this.Son = 0;
};
this.Son++;
alert(this.Son);
alert(this.Father);
};
};
</script>
</body>
它的输出让我很困惑。因为在inner()函数中,this.Son输出Son的递增整数值。但我希望this.Father失败因为inner()没有.Feather属性。但是它没有抛出异常而是提醒它的价值。父亲 - 似乎
此时我脑子里有两个问题:
'this'关键字是否始终指向 外部范围的内部甚至在内部功能内部?
没有任何实例声明'this'关键字引用方法中的内容? (我的意思是没有喜欢的东西var myFamily = new Outer()
)
谢谢,
burak ozdogan
答案 0 :(得分:5)
this
由调用模式决定,即如何调用函数对象。
有4种不同的调用模式:
方法调用:函数被定义为某个对象的属性,并通过使用细化的对象调用,即.
。
a.func(); // this
指对象,即a
。
函数调用:普通函数调用。
FUNC(); // this
与全局对象绑定。
constuctor调用:好吧,它有点复杂。由于构造函数被用作新函数对象的consturctor方法new
,this
指的是正在创建的新函数对象。
var func = new Func(); // this
在func
构造函数中时引用Func
应用调用:
func.apply(thisArg,argArray); // this
与第一个参数
换句话说,示例中的this
都是指全局对象(您的onClick
调用Other()
)。您应该尝试使用new Other()
代替。