【问题标题】:What is the difference between a private and public function?私有函数和公共函数有什么区别?
【发布时间】:2010-04-15 19:49:26
【问题描述】:

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

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

(function(){}) 

在 javascript 中是私有函数吗?

【问题讨论】:

  • function(){} 是一个匿名函数。
  • 天哪!我有很多东西要学!

标签: php javascript coding-style


【解决方案1】:

“public”和“private”这两个词在 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”——对你没有任何好处,因为在外部 x 你不能使用这个名字来访问函数。

然而,那个奇怪的对象有另一个函数,叫做“getMyPrivates”,你可以得到它。当你调用它时,你会得到一个对“maybePrivate”函数的引用,然后你可以用它来调用那个函数。现在,“maybePrivate”仍然是私有的吗?好吧,如果你这样做:

alert(x.getMyPrivates()());

你会看到“我的隐私!”信息。所以看起来“maybePrivate”不再那么私密了。但是,如果您再次尝试,它将无法正常工作,因为“getMyPrivates”会在第一次调用后将自己设置为虚拟对象。

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

【讨论】:

  • +1 对于方法名x.getMyPrivates(),我是12呵呵。
猜你喜欢
  • 2019-10-02
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 2014-04-27
  • 2011-10-23
  • 2011-05-20
相关资源
最近更新 更多