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
,当您不希望直接从外部访问变量时,尤其是当您尝试将其设为该对象的私有(private)属性时,尤其要这样做,这就是为什么您不为该对象创建属性,而只是创建一个该关闭变量。仍然可以在对象内部访问它,并使用
getAge
方法将其返回,但不能直接使用age返回。因此没有属性age
,但是存在一个变量age