javascript中的私有成员真的那么复杂吗?

问题描述 投票:0回答:1

我试图通过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!"

在我的阅读中,我不断发现甚至没有提到这个选项的文章,而是提出复杂的解决方案,比如使用闭包或WeakMaps。通常结论是,在Javascript中没有与私人成员合作的好方法。

任何人都可以填写我所遗漏的内容吗?出于某种原因,这是一个坏主意吗?

javascript private-members
1个回答
0
投票

谢谢你的回复。所以我对这种方法的局限性的理解是,在构造函数之外添加的方法无法看到“私有”变量。我觉得有点开明。

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
© www.soinside.com 2019 - 2024. All rights reserved.