私人和公共职能有什么区别?

时间:2010-04-15 19:49:27

标签: php javascript coding-style

我是一名新程序员,我从C开始,现在开始享受JavaScript和一点点PHP。最近我听到了“私人”和“公共”这两个词的功能。任何人都可以解释这两者以及它们对程序员的用处吗?

我在这里可能完全错了......但是

(function(){}) 

在javascript中是一个私有函数吗?

1 个答案:

答案 0 :(得分:11)

“公共”和“私人”这两个词并不适合Javascript。关键是:你有办法引用你知道存在的某些功能吗?也就是说,您可以通过名称(直接或作为您可以参考的另一个对象的属性)来引用它吗?如果是这样,恭喜你,你可以调用这个功能。如果没有,那么你就不能。

这意味着函数的“公共性”不是静态的,因为它在Java或C之类。考虑:

var x = (function() {
  function maybePrivate() { return "my privates!"; }

  return {
    getMyPrivates: function() {
      var rv = maybePrivate;
      this.getMyPrivates = function() { return null; };
      return rv;
    }
  };
})();

怪异。所以现在“x”是一个对象,你可以看到那里有一个“maybePrivate”函数。但是,这个名字 - “maybePrivate” - 对你没有任何好处,因为从 outside x你不能使用这个名字来获得这个功能。

然而,这个奇怪的对象有另一个函数,称为“getMyPrivates”,你可以到达它。当您调用它时,您将获得对“maybePrivate”函数的引用,然后您可以使用该函数调用该函数。现在,“maybePrivate”仍然是私人的吗?好吧,如果你这样做:

alert(x.getMyPrivates()());

你会看到“我的私人!”信息。所以看起来“maybePrivate”不再那么私密了。但是,如果您再次尝试 ,它将无法正常工作,因为“getMyPrivates”会在第一次调用之后安排自己进行控制。

通过镜子的那次小旅行的目的是说明Javascript是动态的。唯一真正“静态”的是,一旦你在一个闭包内部封闭了一个函数(比如上面例子中的“maybePrivate”),你就不能强迫它从外面的中透露出来了对象(至少,不是没有经历过一些真正扭曲的扭曲;语言是如此糊涂以至于声称某些东西“不可能”是危险的:-)。示例中的该对象可以选择显示其“私有”内容,但也可以选择不显示。