在下面的代码中为什么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
,则更改不会发生。
答案 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”,然后您将理解为什么左侧的值设置为右侧的值。