0

考虑以下代码:

 <script>
  person={
          firstname:"John",
          lastname:function(){alert(this.firstname)}
         }
          person.lastname();
 </script>

就像局部变量可以从函数内的任何地方访问,要访问对象的属性为什么要使用this 关键字?既然我们在对象内部使用this关键字是强制性的吗?

4

2 回答 2

2

这是因为在 JavaScript 中,当您使用 时firstname,解释器会在当前作用域中查找该变量,然后在所有父作用域中查找该变量。但是对象并没有形成范围。

因此,您需要firstname通过特殊变量 -访问this

提示:函数正在创建范围,例如:

 var person = function () {
     var firstname = "John";

     return {
         lastname: function () {
             alert(firstname)
         }
     };
 }();

没有this.

于 2013-04-04T06:29:49.323 回答
2

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"

thisprototype chain或在DOM event handlers

于 2013-04-04T06:42:21.240 回答