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.var1will 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 不那么优雅。