Mir*_*ror 13 javascript private class public
我有这堂课:
function ctest() {
this.var1 = "haha";
this.func1 = function() {
alert(this.var1);
func2();
alert(this.var1);
}
var func2 = function() {
this.var1 = "huhu";
}
}
Run Code Online (Sandbox Code Playgroud)
并称之为:
var myobj = new ctest();
myobj.func1();
Run Code Online (Sandbox Code Playgroud)
是不是第二个警报会弹出"huhu"?func2是私有的,是否可以访问var1公共变量?
如果私有函数无法访问公共变量,我该怎么办?
提前致谢!
Aln*_*tak 17
您需要为以下呼叫提供上下文func2:
this.func1 = function() {
alert(this.var1);
func2.call(this);
alert(this.var1);
}
Run Code Online (Sandbox Code Playgroud)
如果没有上下文,调用将使用全局对象(即window) - 您应该看到何时运行window.var1在两个警报之间创建的当前代码.
Luc*_*ero 12
函数不依赖于实例,因此您的调用func2最终会作为调用而不this指向预期的实例.
您可以修复调用以包含上下文:
function ctest() {
this.var1 = "haha";
this.func1 = function() {
alert(this.var1);
func2.call(this);
alert(this.var1);
}
var func2 = function() {
this.var1 = "huhu";
}
}
Run Code Online (Sandbox Code Playgroud)
或者您可以使用所需对象引用保留变量:
function ctest() {
var that = this;
this.var1 = "haha";
this.func1 = function() {
alert(this.var1);
func2();
alert(this.var1);
}
var func2 = function() {
that.var1 = "huhu";
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7797 次 |
| 最近记录: |