在JS中沒有私人的東西,但是您可以使用closures與示波器一起玩。
比方說,在你的例子中,你不需要公開var1
作爲公共財產。你可以很容易地重寫代碼爲如下:
function ctest() {
var var1 = "haha";
this.func1 = function() {
alert(var1);
func2();
alert(var1);
}
var func2 = function() {
var1 = "huhu";
}
}
因爲無論func1
和func2
股範圍相同 - 他們是在同一個函數定義,ctest
- 他們可以訪問相同的變量。當然在這種情況下,您沒有var1
暴露,所以:myobj.var1
將undefined
。
如果你想var1
暴露財產,那麼你需要的是bindfunc2
你在構造函數創建的對象實例:
function ctest() {
this.var1 = "haha";
this.func1 = function() {
alert(this.var1);
func2();
alert(this.var1);
}
var func2 = function() {
this.var1 = "huhu";
}.bind(this);
}
否則func2
將有不同的上下文對象(this
)。如果瀏覽器不支持bind
,你不想使用墊片(如上面的鏈接),你可以再次採取封閉的優勢:
function ctest() {
this.var1 = "haha";
this.func1 = function() {
alert(this.var1);
func2();
alert(this.var1);
}
var context = this;
var func2 = function() {
context.var1 = "huhu";
}
}
IMVHO是那麼優雅。
另外,這裏沒有像'private'這樣的東西。 – Alexander
這個'obj.func1()'大概應該是'myobj.func1()' – forsvarir
@forsvarir是的它應該 - 我爲他修復了它。 – Alnitak