私有成员在javascript中安全吗?

问题描述 投票:-1回答:2

我正在学习freecodecamp JavaScript oop课程。本课程描述了如何在对象(如密码和银行帐户)无法在外部更改的情况下,在对象内部声明私有变量。对私有变量的唯一访问是通过可以访问私有变量的公共方法。然后提供此演示代码来说明这一点。

function Bird() {
  let hatchedEgg = 10; // private variable

  /* publicly available method that a bird object can use */
  this.getHatchedEggCount = function() { 
    return hatchedEgg;
  };
}
let ducky = new Bird();
ducky.getHatchedEggCount(); // returns 10

我不明白如何将hatchedEgg变量称为安全的。作为用户/黑客,我要做的就是猜测从函数getHatchedEggCount()返回的变量名称。在这种情况下,hatchedEgg(对于黑客来说并不难),然后我可以使用此行来修改私有变量;

Bird.hatchedEgg = 20;
console.log(Bird) // returns { [Function: Bird] hatchedEgg : 20 }

我想念什么吗?

//-------------- Clarification Edit

显然,问题出在freecodecamp控制台(一个Bug),它正在更改私有变量的值。如果您愿意,可以尝试将上面的代码粘贴到此链接中,您将看到。 freecodeConsoleLink

javascript oop private
2个回答
0
投票

直接调用ducky.hatchedEgg(我想你是说这是代替Bird.hatchedEgg),不会直接给您任何结果(准确地说是undefined)。这就是示例的全部要点,即私有变量不能直接从外部访问。通过某种方法可以访问它们,这些方法又可能/不能暴露于外部。安全性来自此。


0
投票

我认为您对正在创建的变量以及如何访问每个变量感到有些困惑。

© www.soinside.com 2019 - 2024. All rights reserved.