访问JavaScript构造函数中的私有成员

时间:2019-02-10 13:53:42

标签: 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");
}

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);
}

1 个答案:

答案 0 :(得分:1)

  

话虽如此,有没有办法实现以下目标?

不。在构造函数中声明的_path是局部变量。它对构造函数完全是私有的,并且在构造函数终止后消失,因为构造函数不会创建任何保留它的闭包。

如果您想继续使用它,可以:

  1. 在构造函数中创建getFileName,以便将其关闭,或者
  2. 将其另存为实例(this)上的属性,然后从该属性中使用它

已经说过:在构造函数中通过require访问某些内容似乎有点反模式。由于它不会更改,因此只需在构造函数外部访问它即可,例如:

var FileHelper = (function() {
    var _path = require("path");

    function FileHelper() {
    }
    FileHelper.prototype.getFileName = function() {
        // ...use _path here...
    };

    return FileHelper;
})();

(我一直使用ES5级别的语法,因为您的问题似乎是在避免使用ES2015 +)