在oop语言中使用私有变量/方法的情况的示例是有用/必要的

时间:2014-02-17 08:02:21

标签: javascript oop closures scope private-members

每当我尝试研究这个问题时,通常会提出的答案是“所以外部世界无法直接访问局部变量”。这里缺少的是适用的背景。例如,我在下面的代码中得到了

function Person(firstName, lastName) {
  var _firstName = firstName,
  _lastName = lastName;

  this.firstName = function(value) {
  if (!arguments.length) return _firstName;
  _firstName = value;
}};

变量被认为是私有的,因为它们只能通过调用函数来访问。这有什么意义?为什么这有关系?而最令人痛苦的神秘是什么是“现实生活”的情况,其中“所以外部世界不能直接访问局部变量......”的共同解释将适用于/没有看到情况的人有意义它重要的地方。

非常感谢。

3 个答案:

答案 0 :(得分:2)

这一切都是为了促进发展。

“外部代码”只能访问公共属性或对象方法,即使用对象,访问其属性或调用其方法的任何代码只能使用所述对象的公共接口。当代码以任何方式使用公共接口时,您将获得代码耦合。当您在对象/类上声明方法foo时,以及代码中的某个位置obj.foo()时,该代码行现在与foo方法的存在相关联。如果要删除或更改foo方法,您(可能)还必须更改调用它的每一行代码。

受保护的私有属性和方法是一些代码片段,它们只能由类/对象本身使用。 “外部代码”不能有目的地或偶然地耦合到它。当您需要重构该代码时,您可以确保更改在类本身内被隔离,而不必担心可能会破坏大量其他代码。

受保护和私有属性也不会冒被外部代码以不正确方式修改的风险。私有属性只能由类/对象本身修改,因此类/对象本身始终完全控制该属性的值。这确保了对象的一致状态

因此,一个类/对象应该将其公共接口保持在最低限度,并将“公共消费”无意或必要的所有内容保密。这使您可以根据需要公开的对象来关注您的类设计,使对象变得有用,并使实现的其余部分保持灵活。

答案 1 :(得分:1)

在OO语言中,类应公开行为隐藏实现。这被称为封装,使重用度更容易,并且是OO的基础之一。

一般来说,变量是实现的一部分,而不是行为的一部分。这就是为什么通常你不公开它们。

“真实生活”中的一个示例是您必须与之交互的任何API(即Amazon REST API)。如果您只需学习行为详细信息(公共方法),那么您作为开发人员的工作就会比您必须了解网站的每个内部变量的使用情况更容易。此外,如果客户端代码仅与系统的行为(再次,公共方法)交互,则系统可以在不影响其用户的情况下改变(即优化)其实现。

答案 2 :(得分:-2)

oop是程序员和开发人员长期以来一直在使用的概念。在引用私有成员或变量时查看类继承很重要。在类继承中,你有超类和子类,d子类可以继承超类的d属性。以这种方式,声明超类私有或公共的属性将决定子类是否将使用这些属性