问题来自《Javascript高级程序设计(第3版)》187页的这段代码的思考:
function Person(name){
this.getName = function(){
return name;
};
this.setName = function (value) {
name = value;
};
}
var person = new Person("Nicholas");
alert(person.getName()); //"Nicholas"
person.setName("Greg");
alert(person.getName()); //"Greg"
//下面为我自己添加的
var person2 = new Person("Danny");
alert(person2.getName()); //"Danny"
alert(person.getName()); //"Greg"
每次实例化一个对象都要新建一个变量name吗,name并不是对象实例的属性,那么name变量究竟保存在哪里?
原书解释:“私有变量name在Person的每一个实例中都不相同,因为每次调用构造函数都会重新创建这两个方法。”这句我没看懂,重新创建对象中的方法这没有问题,构造函数中的私有变量name是为什么在每个实例中都不同。
再写一个例子供参考:
var A = function(a,b){
var a=a;
this.test = function(){
console.log(a,b);
}
}
var a = new A(1,2);
a.test(); // 1 2
var a2 = new A(3,4);
a2.test(); // 3 4
a.test(); //为什么是 1 2 而不是 3 4 或 3 2 ?
function在javascript中也是一种数据类型
你应该先去了解下闭包。
感谢代码宇宙前辈,是正解
两次执行同一个函数,会生成两个不同的变量对象。
因此,两个name值保存在不同的变量对象中,互不影响。