首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在nodejs模块中访问私有代码?

如何在nodejs模块中访问私有代码?
EN

Stack Overflow用户
提问于 2016-07-09 13:03:35
回答 2查看 102关注 0票数 1

加载模块后,如何访问模块的私有函数和数据?

我知道require函数加载模块并返回包含一些公共对象或函数的module.exports对象,但是如何访问模块中代码的其他“私有”部分?它在记忆中的位置?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-09 13:08:53

NodeJS模块中的TL;DR -代码可以继续访问它们在模块中定义的非导出的东西,因为它们和它们定义的函数关闭在该数据之上。

详细信息:

NodeJS模块实际上是NodeJS在调用它们时调用的大型函数。(不管它们是d的多少次,它们只被称为一次。)JavaScript中的函数调用设置执行上下文,并且在该上下文中创建的任何函数都关闭上下文(它们对上下文及其内容具有持久的引用)。只要任何东西都有对它的引用,即使在“函数”返回之后,执行上下文仍然存在于内存中。在执行上下文中创建的函数是“闭包”。

所以假设您有一个模块foo

代码语言:javascript
复制
var privateData = Math.random();
function publicFunction() {
    console.log("The private data is " + privateData);
}
module.exports.publicFunction = publicFunction;

然后你require它:

代码语言:javascript
复制
var foo = require("foo");
foo.publicFunction(); // Displays the random number

这类似于有一个返回对象的函数:

代码语言:javascript
复制
function fooModule() {
    var privateData = Math.random();
    function publicFunction() {
        console.log("The private data is " + privateData);
    }
    return {
        publicFunction: publicFunction
    };
}

你称之为:

代码语言:javascript
复制
var foo = fooModule();
foo.publicFunction(); // Displays the random number

同样的机制在两个地方都起作用。

更多要探讨的是:

票数 1
EN

Stack Overflow用户

发布于 2016-07-09 13:09:53

模块的使用者只能与其API即a.k.a交互。它出口的东西。您不能直接访问它的私有函数和状态。那就违反了封装。

模块本身可以为您完成此任务。由给定模块导出的任何函数都可以与该模块中的任何内容交互。

如果您来自一个Java或C#世界,请将其看作是类上的公共/私有方法。在节点模块中,除非导出,否则所有东西都是“私有”的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38282104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档