看高程书,里面有一个章节是关于JavaScript模拟OOP中的对象私有属性。请看这段代码<script> function Person(name) { this.getName = function(){ return name; } this.setName = function(newName){ name = newName; } } var lily = new Person("Lily"); var lucy = new Person("Lucy"); lily.setName("I am Lily"); lucy.setName("I am Lucy"); println(lily.getName()); // I am Lily println(lucy.getName()); // I am Lucy function println(obj) { console.log(obj + "\n"); }</script>我对闭包的理解是,闭包函数的[[Scope]]持有了一个外部函数的活动对象引用。所以闭包能访问外部函数的局部变量。而且访问的值是外部函数局部变量最后一次更改的值。那在我这个例子中,外部函数的name变量最后一次更改是这个语句lucy.setName("I am Lucy"); 为什么两个lily、lucy两个对象依然可以打印各自不同的值。而不是最后一次更改的值。虽然这lucy和lily的闭包不是同一个闭包,可是这两个闭包持有的外部函数活动对象不都是Person函数的活动对象吗。println(lily.getName()); // I am Lilyprintln(lucy.getName()); // I am Lucy
1 回答
FFIVE
TA贡献1797条经验 获得超6个赞
你想的应该是只实例化一个对象。
function Person(name){
this.getName = function(){
return name;
}
this.setName = function(newName){
name = newName;
}
}
var temp = new Person()
var lily = temp.setName('Lily')
var lucy = temp.setName('Lucy')
println(temp.getName())
function println(obj){
console.log(obj + "\n");
}
添加回答
举报
0/150
提交
取消