Class NodeJS 中的私有常量
Private const in Class NodeJS
好的同志们,我有一个让我睡不着的问题,我有这个功能:
class iniparser {
constructor (path) {
this.path = path;
}
#_getValue (data, param) {
const iniparam = /^\s*([\w\.\-\_]+)\s*=\s*(.*?)\s*$/;
let value;
data.toString().match(/.*?\n|.+$/g).forEach(function(line) {
if (iniparam.test(line) && line.match(iniparam)[1] === param) {
value = line.match(iniparam)[2];
}
});
return value;
}
然后是一些 public 方法和所有这些...问题是 iniparam,我想将其设为私有,因为我有一个需要常量的 _setValue 方法,我想编写好的代码,我检查 TC39 但即使使用大量示例,我也可以让它工作。请一些灵魂帮助我。
我的简单建议是在 class 定义之前定义 iniparam
。假设此代码在模块中,则模块级别的变量可用于模块中的任何位置,但除此之外是私有的(除非导出它们,否则在模块外不可用)。
这种在要使用它们的代码主体之前声明共享常量的概念在 Javascript 模块中非常常见。你甚至可以说 import
或 require()
的做法是在做同样的事情——初始化模块中任何代码都可以使用的一些模块级常量。它甚至可以使解释器的效率稍微提高一些,因为在模块初始化时常量只是 created/initialized 一次,而不是每次调用某个函数时(尽管如果它是 const
,解释器可能已经优化了为此)。
// declare shared constants
const iniparam = /^\s*([\w\.\-\_]+)\s*=\s*(.*?)\s*$/;
class iniparser {
constructor (path) {
this.path = path;
}
#getValue (data, param) {
let value;
data.toString().match(/.*?\n|.+$/g).forEach(function(line) {
if (iniparam.test(line) && line.match(iniparam)[1] === param) {
value = line.match(iniparam)[2];
}
});
return value;
}
}
然后,此模块中的任何代码都可以访问常量,但模块外的任何代码都无法访问它。
请注意,除了将 iniparam
声明为共享常量外,您还可以将 getValue()
本身设为模块级实用程序函数。由于它似乎不访问实例数据,因此它实际上不需要是一种方法。如果setValue()
也不访问实例数据,它也可以是模块级实用函数。
// declare shared constants
const iniparam = /^\s*([\w\.\-\_]+)\s*=\s*(.*?)\s*$/;
function getValue (data, param) {
let value;
data.toString().match(/.*?\n|.+$/g).forEach(function(line) {
if (iniparam.test(line) && line.match(iniparam)[1] === param) {
value = line.match(iniparam)[2];
}
});
return value;
}
class iniparser {
constructor (path) {
this.path = path;
}
}
好的同志们,我有一个让我睡不着的问题,我有这个功能:
class iniparser {
constructor (path) {
this.path = path;
}
#_getValue (data, param) {
const iniparam = /^\s*([\w\.\-\_]+)\s*=\s*(.*?)\s*$/;
let value;
data.toString().match(/.*?\n|.+$/g).forEach(function(line) {
if (iniparam.test(line) && line.match(iniparam)[1] === param) {
value = line.match(iniparam)[2];
}
});
return value;
}
然后是一些 public 方法和所有这些...问题是 iniparam,我想将其设为私有,因为我有一个需要常量的 _setValue 方法,我想编写好的代码,我检查 TC39 但即使使用大量示例,我也可以让它工作。请一些灵魂帮助我。
我的简单建议是在 class 定义之前定义 iniparam
。假设此代码在模块中,则模块级别的变量可用于模块中的任何位置,但除此之外是私有的(除非导出它们,否则在模块外不可用)。
这种在要使用它们的代码主体之前声明共享常量的概念在 Javascript 模块中非常常见。你甚至可以说 import
或 require()
的做法是在做同样的事情——初始化模块中任何代码都可以使用的一些模块级常量。它甚至可以使解释器的效率稍微提高一些,因为在模块初始化时常量只是 created/initialized 一次,而不是每次调用某个函数时(尽管如果它是 const
,解释器可能已经优化了为此)。
// declare shared constants
const iniparam = /^\s*([\w\.\-\_]+)\s*=\s*(.*?)\s*$/;
class iniparser {
constructor (path) {
this.path = path;
}
#getValue (data, param) {
let value;
data.toString().match(/.*?\n|.+$/g).forEach(function(line) {
if (iniparam.test(line) && line.match(iniparam)[1] === param) {
value = line.match(iniparam)[2];
}
});
return value;
}
}
然后,此模块中的任何代码都可以访问常量,但模块外的任何代码都无法访问它。
请注意,除了将 iniparam
声明为共享常量外,您还可以将 getValue()
本身设为模块级实用程序函数。由于它似乎不访问实例数据,因此它实际上不需要是一种方法。如果setValue()
也不访问实例数据,它也可以是模块级实用函数。
// declare shared constants
const iniparam = /^\s*([\w\.\-\_]+)\s*=\s*(.*?)\s*$/;
function getValue (data, param) {
let value;
data.toString().match(/.*?\n|.+$/g).forEach(function(line) {
if (iniparam.test(line) && line.match(iniparam)[1] === param) {
value = line.match(iniparam)[2];
}
});
return value;
}
class iniparser {
constructor (path) {
this.path = path;
}
}