在javascript中添加带有(this)关键字的新属性

时间:2014-08-29 21:04:42

标签: javascript object this

在下面的代码中为什么this.age = age;age = this.age不同。第二个是未定义的。

代码是:

 function person(firstname,lastname,age,eyecolor) {
    this.firstname = firstname;
    this.lastname = lastname;
    //this.age = age;
     age = this.age; 
    this.eyecolor = eyecolor;
    this.changeName = changeName;
    function changeName(name) {
      // this.lastname = name;
         name = this.lastname;
    }
}
var myMother = new person("Sally","Rally",48,"green");
myMother.changeName("Doe");
document.getElementById("demo").innerHTML =
"My mother's last name is " + myMother.lastname;

如果我们更改订单name = this.lastname,则更改不会发生。

1 个答案:

答案 0 :(得分:2)

当你使用this时,它引用当前对象的范围。 age截至当时是传递的age,但this.age从未被定义过。所以你也可以设置age = undefined

this.age是对象person()的一部分。 age是您传递给对象的值。

this.age; //undefined
age=5;//5
this.age;//undefined
age = this.age;// undefined for both
this.age=7;//7
age;//undefined
age=this.age;//both equal 7

以下示例中没有this.age个变量相同

    function bob(){
       this.age;
    }

    function smith(){
       this.age;
       var smithSelf = this;//i just created a value smithSelf that is equal to this inside of smith() so smithSelf is pointing to smith()
       function lastTime(){
          this.age;//this is lastTime() this.age value.
          smithSelf.age;//this is smith() this.age value.
       }
   }

如果person(age){} age ()传递的this.age是您传入的值。age与值{function person(age){ this.age; } 不同1}}你传入的。

this

如果您仍然对this感到困惑,那么您可能需要了解编程范围。所有OOP语言都有一个通常称为a=b的范围值,它指的是“此范围”。

根据示例a,您最终会将b设置为b的值。因此,如果a未定义,那么b现在将是未定义的。如果您希望a等于b=a,那么您会this.b。在对象中,您执行a并传入值a,如果您执行5,我们会将a=this.b设置为this.b,您会注意到从过去的示例this.b创建但您从未设置过值,因此a未定义。现在,此时您将this.b设置为等于a,所以现在a=b未定义。

如果您对操作顺序感到困惑,只需简单地说出等式即可。 {{1}}“A等于B”,然后您将理解为什么左侧的值设置为右侧的值。