Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript访问对象_Javascript - Fatal编程技术网

javascript访问对象

javascript访问对象,javascript,Javascript,考虑以下代码: <script> person={ firstname:"John", lastname:function(){alert(this.firstname)} } person.lastname(); </script> 人={ 名字:“约翰”, lastname:function(){alert(this.firstname)} } person.lastname()

考虑以下代码:

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

人={
名字:“约翰”,
lastname:function(){alert(this.firstname)}
}
person.lastname();

就像可以从函数中的任何位置访问局部变量一样,要访问对象的属性,为什么要使用this关键字?既然我们在对象中,就必须使用this关键字?

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

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

提示:函数正在创建作用域,以此类推示例:

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

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

如果没有
这个

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

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

提示:函数正在创建作用域,以此类推示例:

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

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

如果没有
这个
这个
关键字在JavaScript中与其他语言相比有点不同。当前作用域中绑定到此的对象由当前函数的调用方式决定,在执行过程中不能通过赋值进行设置,每次调用函数时它都可能不同

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"

原型链上或在
DOM事件处理程序中的行为也不同
JavaScript中的此
关键字与其他语言相比在某种程度上有所不同。当前作用域中绑定到此
的对象由当前函数的调用方式决定,在执行过程中不能通过赋值进行设置,每次调用函数时它都可能不同

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"

原型链
DOM事件处理程序中的行为也不同

是,除非您想使用person.firstname是,除非您想使用person.firstname