我正在学习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
直接调用ducky.hatchedEgg
(我想你是说这是代替Bird.hatchedEgg
),不会直接给您任何结果(准确地说是undefined
)。这就是示例的全部要点,即私有变量不能直接从外部访问。通过某种方法可以访问它们,这些方法又可能/不能暴露于外部。安全性来自此。
我认为您对正在创建的变量以及如何访问每个变量感到有些困惑。