function Person(name){
var age;
this.name = name;
this.setAge = function(a){
age = a;
}
this.getAge = function(){
return age;
}
}
var p0 = new Person("John");
p0.setAge(24);
console.log("p0.getAge "+p0.getAge());//p0.getAge 24
var p1 = new Person("Mike")
p1.setAge("25");
console.log("p0.getAge "+p0.getAge());//I think the output here should be p0.getAge 25,but it is p0.getAge 24
console.log("p1.getAge "+p1.getAge());//p0.getAge 25
变量“ age”不属于Person的任何实例,因为在Person的构造函数中没有“ this.age”,因此它应该首先由Person的实例共享,但是结果不是我所期望的.我糊涂了!
解决方法:
function Person(name){
var age;
this.name = name;
this.setAge = function(a){
age = a;
}
this.getAge = function(){
return age;
}
}
看起来是var age;您不声明this.age,尤其是当您不想直接从外部访问变量时,即试图将其设为该对象的私有属性时,尤其要这样做,这就是为什么不为该对象创建属性的原因,但只是该关闭的变量.
您仍然可以在对象内部访问它,并使用getAge方法将其返回,但不能直接与age一起使用.因此没有财产年龄,但存在可变年龄