:我有一个用'揭示模块模式'编写的javascript类:
myObject = function () {
var varA,
varB,
methodA = function (data) {
//Some code...
},
methodB = function (data) {
var that = this;
that.methodA("a"); // --> 'that' recognize only public methods: 'methodB' / 'methodC' !!!
},
methodC = function (data) {
};
return {
methodB : methodB,
methodC : methodC,
};
} ();
正如你在'this'中看到的那样,'method''不能识别类的私有方法。
修改 我的目的是从公共类调用辅助私有方法。在这个私人课程中,我需要'这个'。如果我直接从'methodB'调用'methodA(“a”)'(没有'that')我没有'this'('this'将是全局上下文)。解决方案将是:
methodA.call(this, "a");
答案 0 :(得分:4)
首先,你有错误
return {
methodB = methodB,
methodC = methodC,
}
应该是
return {
methodB : methodB,
methodC : methodC
}
在您的示例中,您有
methodB = function (data) {
var that = this;
that.methodA("a");
}
that=this
并且关键字this
引用当前对象,并且您返回了一个包含methodB
和methodC
的对象,但在您的对象中您没有{{1}所以methodA
在that.methodA("a")
内部无法正常工作,因为methodB
不是您当前对象的一部分,但如果您写的是
methodA
然后它就会运行。
methodB = function (data) {
methodA("a");
}
和that=this
以及this=myObject
只有myObject
和methodB
两种方法methodC
,这意味着that.methodA("a")
不应该因为它在myObject.methodA("a")