使私有函数可访问外部文件
Making the private function accessible to external files
如何使私有函数可访问另一个文件。我有以下两个文件,我正在尝试访问File2.js中的msg()。如果不在File1.js 中进行任何更改,我如何实现这一点
File1.js
function test() {
}
test.prototype.first = function () {
msg("abc");
}
function msg(name) {
console.log("hello " + name);
}
module.exports = test;
File2.js
var test = require("./File1");
console.log(test.msg("xyz"))
我收到错误作为
TypeError:undefined不是函数
我不是JavaScript程序员,但您的msg函数在测试类之外。
因此,您需要使用prototype或将此函数放入test()函数中以使其工作。
将您的消息()更改为
test.prototype.msg = function(name) {
console.log("hello " + name);
}
此外,因为它里面已经有console.log了,所以你可以像在下面一样使用它
test.msg("xyz");
并且应该打印到控制台
可能有很多方法可以处理这种情况,但下面是我如何修改您的代码:
严格来说,我不认为这是一个私有方法,test函数是某种构造函数,只有导出msg功能才能访问。
我还将msg原型中的console.log更改为return语句,因为它将是未定义的。
File1.js
function test() {
}
test.prototype.first = function () {
msg("abc");
};
test.prototype.msg = function(name) {
return("hello " + name);
};
module.exports = test;
File2.js
var Test = require("./File1");
test = new Test();
console.log(test.msg("xyz"));
我"认为"您所寻找的是类似于C++中友元函数的东西。我认为这是一种代码气味,因为它破坏了封装。无论如何,Javascript不支持AFAIK这个概念。
此外,即使在File2.js中调用test.first()
,也会出现错误。这是因为您还没有使用在File1.js 中导出的构造函数实际创建对象
最终,如果不修改第一个文件,就无法完成您想要的操作。在当前实现中,最简单的方法是将其添加到原型中,以便模块的每个对象实例都能获得它。然而,正如其他人所说,您的函数不再被视为私有函数。
如果它是一个"静态"实用程序函数,您可以将它提取到另一个文件(即util.js)中,该文件以对象文本的形式导出它。
相关文章:
- Javascript从匿名函数访问外部对象属性
- 在nodejs中使用require来访问外部javascript文件
- TypeScript:在对象文字字段中的访问器中访问外部“this”
- jQuery:如何访问外部变量
- 从jQuery.ech()函数访问外部作用域
- 我可以't访问外部javascript文件中的freemarker变量
- 是否有任何方法可以访问外部范围's变量
- 访问外部调用方函数参数
- 即使在引用后也无法访问外部Jscript文件
- JQuery 承诺:访问外部变量或将结果传递给 .done 内部的 IIFE
- 从内联 html 页面访问外部 JS 变量
- 咕噜声:访问外部文件中的 YAML 符号
- 从 angularjs 控制器访问外部 JavaScript 函数和类
- Chrome 应用程序使用 JavaScript / jQuery / AngularJS 访问外部资源
- 使用 JavaScript 和/或 jQuery 访问外部 HTML 正文的宽度和高度
- 评估是否可以访问外部函数
- 如何从传入的预定义回调访问外部变量
- 为什么我无法使用codeigniter访问外部javascript文件,即使它们被加载了
- 从 js obj 数组访问外部 js obj 属性
- 如何访问外部JavaScript文件中的DOM对象