揭示模块模式(JavaScript) - 这无法访问私有方法
revealing module pattern (javascript) - this cannot access private methods
:I有一个用"揭示模块模式"编写的 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,
};
} ();
正如你在"methodB"中的"this"中看到的,它不识别类的私有方法。
编辑:我的目的是从公共类调用帮助程序私有方法。在这个私人课程中,我需要"这个"。如果我直接从"methodB"(没有"that")调用"methodA("a")",我没有"this"("this"将是全局上下文)。解决方案将是:
methodA.call(this, "a");
首先,
您在
return {
methodB = methodB,
methodC = methodC,
}
它应该是
return {
methodB : methodB,
methodC : methodC
}
在您的示例中,您有
methodB = function (data) {
var that = this;
that.methodA("a");
}
that=this
和关键字 this
引用当前对象,并且您返回了一个带有 methodB
和 methodC
的对象,但在您的对象中您没有methodA
所以that.methodA("a")
在methodB
内不起作用methodA
因为它不是当前对象的一部分,但如果你写成这样
methodB = function (data) {
methodA("a");
}
然后它就会运行。
that=this
和this=myObject
和myObject
只有两种方法methodB
和methodC
,所以that.methodA("a")
这意味着myObject.methodA("a")
不应该运行,因为它在myObject
中不存在
-1 和演示-2
相关文章:
- 从vuejs中的组件模板访问父方法
- JavaScript无法访问同级方法
- 从HTML中的另一个文件访问javascript方法
- 如何从Vue.js中的子组件访问父方法
- 为什么dijit.form.Select有方法setStore(),而dijit.fform.FilteringSele
- 通过jQuery访问Sizzle方法
- 从jQuery select访问插件方法
- 可以访问公共方法中的私有类属性
- 从批处理文件访问JavaScript方法
- 我应该在我的JavaScript应用程序中创建访问器方法吗?
- 揭示模块模式(JavaScript) - 这无法访问私有方法
- Angular - 编译指令后无法访问控制器方法
- 直接访问字符串方法
- 匿名事件处理程序无权访问原型方法
- 在 dojo 中使用它通过父类访问子方法
- 如何访问原型方法
- 在非 IE 浏览器中访问 API 方法
- 在创建Javascript“类”的实例时,有没有办法构建对象,以便可以访问所有方法
- 在附加到webRequest事件时,是否有方法访问匹配的URL模式
- 如果访问amazon s3对象,是否有方法调用lambda函数?