gpt4 book ai didi

javascript - 在 JavaScript 构造函数中访问私有(private)成员

转载 作者:行者123 更新时间:2023-12-03 00:13:30 25 4
gpt4 key购买 nike

说我有这个

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
}

我倾向于将方法的实现“附加”到构造函数的原型(prototype)上,并且如果可能的话,希望保留构造函数本身中包含的任何依赖项,而不是在构造函数的文件中将它们声明为全局变量。

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

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

FileHelper.prototype.getFileName = function (filePath) {
// _path is successfully referenced without reference error
return _path.basename(filePath);
}

最佳答案

with that said, is there a way to achieve the following?

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

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

  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+)

关于javascript - 在 JavaScript 构造函数中访问私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54617086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com