JavaScript中的私人成员真的很复杂



我试图澄清我对JavaScript中私人成员的理解。似乎应该很容易:

function MyClass(param) {
  var thisIsPrivate = param;
  this.getPrivateMember = function() {
    return thisIsPrivate;
  }
}
var thing = new MyClass('tada!');
console.log(thing.thisIsPrivate)       // undefined
console.log(thing.getPrivateMember())  // "tada!"

在我的阅读中,我一直遇到文章,这些文章甚至没有提及这一点,而是提出了复杂的解决方案,例如使用封闭或弱图。通常的结论是,在JavaScript中没有一个与私人成员合作的好方法。

有人可以让我填写我所缺少的东西吗?这是由于某种原因是个坏主意吗?

感谢您的答复。因此,我对这种方法的局限性的理解是,在构造函数之外添加的方法无法看到"私人"变量。我感到有些开明。

function MyClass(param) {
  var thisIsPrivate = param;
  this.getPrivateMember = function() {
    return thisIsPrivate;
  }
}
MyClass.prototype.showPrivateMember = function(){
  console.log(thisIsPrivate);
}
var thing = new MyClass('tada!');
console.log(thing.thisIsPrivate)       // undefined
console.log(thing.getPrivateMember())  // tada!
thing.showPrivateMember(); // ReferenceError: thisIsPrivate is not defined at MyClass.showPrivateMember
thing.showPrivateMember = function(){
  console.log(thisIsPrivate);
}
thing.showPrivateMember(); // ReferenceError: thisIsPrivate is not defined at MyClass.showPrivateMember