使私有函数可访问外部文件

Making the private function accessible to external files

本文关键字:访问 外部 文件 函数      更新时间:2023-09-26

如何使私有函数可访问另一个文件。我有以下两个文件,我正在尝试访问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)中,该文件以对象文本的形式导出它。