📜  如何在 JavaScript 的构造函数中将变量设为私有?(1)

📅  最后修改于: 2023-12-03 14:52:21.602000             🧑  作者: Mango

如何在 JavaScript 的构造函数中将变量设为私有?

在 JavaScript 中,我们可以通过使用闭包或 ES6 中的类来将变量设为私有。以下是如何在构造函数中使用这些方法来创建私有变量和方法的示例:

使用闭包

使用闭包可以创建私有变量和私有方法。在构造函数中,将变量和方法定义为函数的局部变量和局部函数。这些变量和函数只能在外部访问函数的公共接口中使用。

function Person(name) {
  var age = 0; // 私有变量

  function increaseAge() { // 私有方法
    age++;
  }

  this.getName = function() {
    return name;
  };

  this.getAge = function() {
    return age;
  };

  this.birthday = function() {
    increaseAge();
  };
}

var p = new Person('Bob');
console.log(p.getName()); // 输出 'Bob'
console.log(p.getAge()); // 输出 0
p.birthday();
console.log(p.getAge()); // 输出 1

在上面的示例中,变量 age 和函数 increaseAge 是私有的,不能从外部访问它们。公共接口由 getNamegetAgebirthday 方法组成,它们可以读取和修改私有变量和调用私有方法。

使用 ES6 类

在 ES6 中,我们可以使用类和 Symbol 来创建私有变量。在类中,只需要将变量和方法定义为类的实例变量和实例方法,然后在类中使用 Symbol 来创建私有变量。这些私有变量只能在类的实例方法中使用。

const ageSymbol = Symbol('age'); // 私有变量

class Person {
  constructor(name) {
    this.name = name;
    this[ageSymbol] = 0;
  }

  getName() {
    return this.name;
  }

  getAge() {
    return this[ageSymbol];
  }

  birthday() {
    this[ageSymbol]++;
  }
}

const p = new Person('Bob');
console.log(p.getName()); // 输出 'Bob'
console.log(p.getAge()); // 输出 0
p.birthday();
console.log(p.getAge()); // 输出 1

在上面的示例中,变量 ageSymbol 是私有的,只能在类的实例方法中使用。其他方法和变量是公共的,可以从外部访问。