【问题标题】:private variable mean in javascriptjavascript中的私有变量均值
【发布时间】:2020-03-27 18:05:56
【问题描述】:

javascript 中的“私有变量”是什么意思? javascript 中没有声明“私有变量”。

所以我们通常使用 '_' 或闭包。

在这一点上,我很好奇“关闭”。 我从另一个网站获得了示例。

function createAnimal(name, job) {
  // "Private" variables here
  let _name = name;
  let _job = job;

  // Public variables here
  return {
    // Getter Methods
    getName() {
      return _name;
    },
    getJob() {
      return _job;
    },
    // Setter Methods
    setName(newName) {
      _name = newName;
    },
    setJob(newJob) {
      _job = newJob;
    }
  };
}

以上示例
我们可以更改 setName 的 _name 'private variable'。

Reault
“私有变量”意味着我们不能访问变量?还是常数?

【问题讨论】:

标签: javascript function scope closures private


【解决方案1】:

希望对你有帮助:

私有成员由构造函数创建。普通变量和 构造函数的参数成为私有成员。

function Container(param) {
    this.member = param;
    var secret = 3;
    var that = this;
}

此构造函数生成三个私有实例变量:param, 秘密,还有那个。它们附着在物体上,但它们不是 外部可访问,对象自身也无法访问 公共方法。私有方法可以访问它们。私人的 方法是构造函数的内部函数。

function Container(param) {

    function dec() {
        if (secret > 0) {
            secret -= 1;
            return true;
        } else {
            return false;
        }
    }

    this.member = param;
    var secret = 3;
    var that = this;
}

私有方法 dec 检查秘密实例变量。如果是 大于零,它递减秘密并返回真。否则它 返回假。它可以用来使这个对象限制为三个 用途。

按照惯例,我们将那个变量设为私有。这是用来制作 私有方法可用的对象。这是一种解决方法 ECMAScript 语言规范中的错误导致此错误 内部函数设置错误。

私有方法不能被公共方法调用。设为私有 方法有用,我们需要引入一个特权方法。

参考:Read more

【讨论】:

  • 谢谢。我读了你的评论。而且我认为“私有变量”本身并不是恒定的。
  • @JangSeonHo 是的,你是对的,私有变量不一定是常量。
【解决方案2】:

私有变量是隐藏的,因此不能直接访问。例如,您将无法致电animal._name = "Rover"

相反,您应该调用一个封装变量的函数。在您的示例中,您将改为调用animal.setName("Rover")。因此,这些变量不一定是恒定的,但只能通过调用内部更改它们的特殊方法来更改它们。

程序员有时喜欢私有变量,因为在某些情况下直接操作变量可能会导致问题。

例如:

function createLogger() {
  let _numMessagesLogged = 0;

  return {
    logMessage(message) {
      console.log(message);
      _numMessagesLogged += 1;
    },
    getNumMessagesLogged() {
      return _numMessagesLogged;
    },
  };
}

在此示例中,每次记录消息时,我们都会增加一个计数器 (_numMessagesLogged)。如果柜台是公开的,有人可以设置logger._numMessagesLogged = -12345,这没有任何意义。相反,我们希望该变量是私有的,以便我们确定记录的消息数量在我们记录某些内容时增加 - 也就是说,它增加当我们打电话给logMessage()

闭包只是通过 JavaScript 实现私有成员的一种方式。还有其他方法可以做到这一点,但方法不如基本概念重要。

你可能对reading more about encapsulation感兴趣。

【讨论】:

    猜你喜欢
    • 2011-12-03
    • 2011-04-12
    • 2017-11-18
    • 2010-11-29
    • 2013-08-02
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    相关资源
    最近更新 更多