javascript-与js中的变量混淆

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一起使用.因此没有财产年龄,但存在可变年龄

上一篇:从另一个类PHP设置受保护变量的正确方法


下一篇:javascript-多个.on(‘click’…函数仅绑定到1st