看高程書,里面有一個章節(jié)是關(guān)于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>我對閉包的理解是,閉包函數(shù)的[[Scope]]持有了一個外部函數(shù)的活動對象引用。所以閉包能訪問外部函數(shù)的局部變量。而且訪問的值是外部函數(shù)局部變量最后一次更改的值。那在我這個例子中,外部函數(shù)的name變量最后一次更改是這個語句lucy.setName("I am Lucy"); 為什么兩個lily、lucy兩個對象依然可以打印各自不同的值。而不是最后一次更改的值。雖然這lucy和lily的閉包不是同一個閉包,可是這兩個閉包持有的外部函數(shù)活動對象不都是Person函數(shù)的活動對象嗎。println(lily.getName()); // I am Lilyprintln(lucy.getName()); // I am Lucy
JavaScript中閉包模仿對象私有屬性的問題?
泛舟湖上清波郎朗
2018-12-26 18:19:26