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

看高程书,里面有一个章节是关于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 Lily
println(lucy.getName()); // I am Lucy

泛舟湖上清波郎朗
浏览 398回答 1
1回答

FFIVE

你想的应该是只实例化一个对象。function Person(name){&nbsp; &nbsp;this.getName = function(){&nbsp; &nbsp; &nbsp; &nbsp;return name;&nbsp; &nbsp;}&nbsp; &nbsp;this.setName = function(newName){&nbsp; &nbsp; &nbsp; &nbsp;name = newName;&nbsp; &nbsp;}}var temp = new Person()var lily = temp.setName('Lily')var lucy = temp.setName('Lucy')println(temp.getName())function println(obj){&nbsp; &nbsp; console.log(obj + "\n");}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript