为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript中闭包模仿对象私有属性的问题?

JavaScript中闭包模仿对象私有属性的问题?

泛舟湖上清波郎朗 2018-12-26 18:19:26
看高程书,里面有一个章节是关于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");

}


查看完整回答
反对 回复 2019-01-29
  • 1 回答
  • 0 关注
  • 392 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信