2013-10-07 57 views
1

http://msdn.microsoft.com/en-us/magazine/ff696765.aspx怎麼做原型的JavaScript實現私有變量工作

這個網站展示了一個例子

function Circle(radius) { 
    this.getRadius = function() { 
    return radius; 
    }; 
    this.setRadius = function(value) { 
    if (value < 0) { 
     throw new Error('radius should be of positive value'); 
    } 
    radius = value; 
    }; 
} 

VS

Circle.prototype.getRadius = function() { 
    return this._radius; 
}; 
Circle.prototype.setRadius = function(value) { 
    if (value < 0) { 
    throw new Error('radius should be of positive value'); 
    } 
    this._radius = value; 
}; 

,並在頁面上它指出

「不過,在這種情況下,我們失去了擁有真正的私人成員的奢侈,並且擁有采用其他方式,例如通過公約表示隱私(強調的財產名稱)。它通常歸結爲在有真正的私人成員還是有更高效的實施之間作出選擇。「

如何使用原型this._失去」真正的私人「成員的奢侈品?,prototype.this沒有考慮作爲參考,以自我?

回答

2

如果一個對象的屬性是在原型對象上的功能代碼可見,它的代碼任何地方可見。

2

自變量this._是一個屬性集在Circle實例上,因此可以從對象訪問。

var c = new Circle(); 
c.setRadius(100); 
console.log(c._radius);//100 

因此,它不是一個真正的私有變量,但只有約定,以_開頭的任何內容都不應該在外部使用。

+0

我c,所以沒有辦法做一個實例變量沒有使用這個關鍵字this._radius,如果你做var _radius,它不會做什麼? – user2167582

+0

必須在此上定義Nope實例變量。 var _radius是定義函數的本地變量。 –