为什么这在这两种情况下引用的关键字是不同的
why what keyword this references in these 2 situation is different?
>第一个代码
var object1 = {name: "my object",
ha: function() {
return this;
}
}
object1.ha() #=> Object {name: "my object", ha: function}
第二个代码
var object2 = {name: "my object2",
ha2: function() {
return function() {
return this;
}
}
}
object2.ha()() #=> window
因为 object2 中的this
由于被放置在匿名函数中而失去了父对象的上下文,并且默认绑定到全局对象,在浏览器中,全局对象是window
.
您可以通过本地化对象引用来补救它:
var object2 = {
name : "my object2",
ha2 : function() {
var _this = this; // <-- here
return function() {
return _this;
}
}
}
因为this
不是一个变量,它是一个关键字,其值在运行时解析。它解析为创建其作用域的最近绑定对象。当您习惯于静态解决此问题的其他语言时,这会令人困惑。在您的示例中,运行函数时最近的绑定对象是 window。
相关文章:
- 为什么_self结果是不同的价值观
- “new”关键字是在构造对象时自动设置“constructor”属性的唯一方法吗
- 同一元素的 this.id 值在浏览器之间是不同的
- jQuery fx速度是不同的速度
- 为什么 Number.parseInt 和全局的 parseInt 是不同的
- 什么是不同的betweet moment().utc().toISOString()和moment().utc().fo
- 蜘蛛中的“extends”关键字是什么
- 在实际的DOM中,用javascript创建的Div结构是不同的
- 在成功部分的Ajax发布方法中,发布数据的顺序和获取数据的顺序是不同的
- 如果数据是新的就添加,如果数据是不同的就更新
- 时区之间的日期转换是不同的
- 为什么& # 39;这个# 39;当直接从addEventListener调用时,in对象函数是不同的
- CSS空白标签似乎不起作用,可能是不同的问题
- 使用[authorization]关键字是ASP.. NET MVC控制器阻止脚本代码运行
- offsetParent是不同的
- 该关键字是构造函数中的窗口对象
- 在chrome控制台的Html是不同的Html在浏览器..它怎么可能
- Django模板组的结果是不同的javascript对象
- 为什么“this"存储的关键字是不同的变量,而不是用于其他方法
- 为什么这在这两种情况下引用的关键字是不同的