JS 中没有私有这样的东西,但是您可以使用闭包来使用范围。
例如,假设在您的示例中您不需要公开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
will be undefined
.
如果您想var1
作为属性公开,那么您需要绑定 func2
到您在构造函数中创建的对象实例:
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
并且您不想使用 shim(如上面的链接所示),您可以再次利用闭包:
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 不那么优雅。