说我有这个
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 () {
// cannot reference _path here
}
我倾向于将方法的实现“附加”到构造函数的原型上,并且希望在可能的情况下,将构造函数本身中包含的所有依赖项保留下来,而不是在构造函数的文件中将它们声明为全局变量。 / p>
话虽如此,有没有办法实现以下目标?
function FileHelper() {
var _path = require("path");
}
FileHelper.prototype.getFileName = function (filePath) {
// _path is successfully referenced without reference error
return _path.basename(filePath);
}
答案 0 :(得分:1)
话虽如此,有没有办法实现以下目标?
不。在构造函数中声明的_path
是局部变量。它对构造函数完全是私有的,并且在构造函数终止后消失,因为构造函数不会创建任何保留它的闭包。
如果您想继续使用它,可以:
getFileName
,以便将其关闭,或者this
)上的属性,然后从该属性中使用它已经说过:在构造函数中通过require
访问某些内容似乎有点反模式。由于它不会更改,因此只需在构造函数外部访问它即可,例如:
var FileHelper = (function() {
var _path = require("path");
function FileHelper() {
}
FileHelper.prototype.getFileName = function() {
// ...use _path here...
};
return FileHelper;
})();
(我一直使用ES5级别的语法,因为您的问题似乎是在避免使用ES2015 +)