在JavaScript构造函数中访问私有成员
说我有这个在JavaScript构造函数中访问私有成员,javascript,constructor,Javascript,Constructor,说我有这个 function FileHelper() { var _path = require("path"); } 我已经看到了两种实现构造函数方法的方法 function FileHelper() { var _path = require("path"); this.getFileName = function() { // can reference _path here } } 及 我倾向于将方法的实现“附加”到构造函数的原型,如果可能
function FileHelper() {
var _path = require("path");
}
我已经看到了两种实现构造函数方法的方法
function FileHelper() {
var _path = require("path");
this.getFileName = function() {
// can reference _path here
}
}
及
我倾向于将方法的实现“附加”到构造函数的原型,如果可能的话,我希望将任何依赖项都包含在构造函数本身中,而不是在构造函数的文件中声明为全局
话虽如此,是否有办法实现以下目标
function FileHelper() {
var _path = require("path");
}
FileHelper.prototype.getFileName = function (filePath) {
// _path is successfully referenced without reference error
return _path.basename(filePath);
}
话虽如此,是否有办法实现以下目标
function FileHelper() {
var _path = require("path");
}
FileHelper.prototype.getFileName = function (filePath) {
// _path is successfully referenced without reference error
return _path.basename(filePath);
}
否。构造函数中声明的\u路径
是一个局部变量。它对构造函数是完全私有的,并且在构造函数终止后会消失,因为构造函数不会创建任何会保留它的闭包
如果要继续使用,请执行以下任一操作:
getFileName
,使其关闭,或this
),然后从该属性中使用它已经说过:在构造函数中通过
require
访问某些东西似乎有点反模式。因为它不会更改,所以只需在构造函数外部访问它,例如:
var FileHelper = (function() {
var _path = require("path");
function FileHelper() {
}
FileHelper.prototype.getFileName = function() {
// ...use _path here...
};
return FileHelper;
})();
(我将其保留在ES5级别的语法中,因为您的问题似乎在避免使用ES2015+)不,没有办法做到这一点。函数内声明的变量的作用域是该函数(以及函数内声明的任何函数)。当然,您可以将
\u path
附加到this
以使其成为构造对象的属性,但它当时并不是真正的“私有”对象。我担心没有办法解决这个问题。为什么IIFE中有一个空的FileHelper
函数声明?难道你不能在IIFE中引用FileHelper
,而不使用空函数声明吗?@jsdev17-你必须声明函数。另一个函数不是FileHelper
,它是一个立即执行(并且只执行一次)的IIFE,用于获取存储\u path
的执行上下文。上面的结构(称为显示模块模式)为与FileHelper
相关的任何内容提供了一个私有静态范围。