考虑以下代码:
<script>
person={
firstname:"John",
lastname:function(){alert(this.firstname)}
}
person.lastname();
</script>
就像局部变量可以从函数内的任何地方访问,要访问对象的属性为什么要使用this 关键字?既然我们在对象内部使用this关键字是强制性的吗?
考虑以下代码:
<script>
person={
firstname:"John",
lastname:function(){alert(this.firstname)}
}
person.lastname();
</script>
就像局部变量可以从函数内的任何地方访问,要访问对象的属性为什么要使用this 关键字?既然我们在对象内部使用this关键字是强制性的吗?
这是因为在 JavaScript 中,当您使用 时firstname
,解释器会在当前作用域中查找该变量,然后在所有父作用域中查找该变量。但是对象并没有形成范围。
因此,您需要firstname
通过特殊变量 -访问this
。
提示:函数正在创建范围,例如:
var person = function () {
var firstname = "John";
return {
lastname: function () {
alert(firstname)
}
};
}();
没有this
.
this
与其他语言相比,JavaScript 中的关键字在某种程度上有所不同。当前作用域内绑定的对象this
是由当前函数的调用方式决定的,不能在执行时通过赋值来设置,每次调用函数时都可以不同!
var person1 = {
firstname: "John",
lastname: function () { alert(this.firstname) }
}
var person2 = {
firstname: "James",
}
person2.lastname = person1.lastname.bind(person2);
var firstname = "Rick";
简单调用:
person1.lastname(); // "John"
上下文更改调用:
person1.lastname.call(window); // "Rick"
绑定函数调用:
person2.lastname(); // "James"
this
在prototype chain
或在DOM event handlers