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

09-07 13:15