javascript:私有變數 (靜態私有變數為什麼會被所以例項共享?-答疑解惑)

南郭竽發表於2018-05-02

私有變數 很好理解,靜態私有變數不好理解,我想了好幾天還是沒有明白,為什麼同一個私有變數會被所有例項共享。我反反覆覆,依然不能理解。直到,我認真去看這段話之後,才明白的。
《JavaScript高階程式設計-靜態私有變數》

這個私有變數被所有例項共享,是兩個原因組合在一起導致的。第一個是原型方法會被所以例項共享;第二個是閉包總是儲存這對包含作用域的引用。(而原型方法,也就是這裡的閉包。)

(function () {
    var name = "";
    Person = function (value) {
        name = value;
    };
    Person.prototype.getName = function () {
        return name;
    };

    Person.prototype.setName = function (value) {
        name = value;
    };
})();
var p1 = new Person('tom');
var p2 = new Person('ann');

p1.setName('張飛');

console.log(p1.getName() +" ### "+p2.getName());

輸出:張飛 ### 張飛

現象的確是這個現象,主要是要理解為什麼會出現這個現象。原因已經在開頭的截圖裡面展示了。

相關文章