php - 私有(private)函数和公共(public)函数有什么区别?

标签 php javascript coding-style

我是一名新程序员,我从 C 开始,现在开始喜欢 JavaScript 和一点点 PHP。最近我经常听到“私有(private)”和“公共(public)”功能这两个术语。任何人都可以解释这两者以及它们如何对程序员有用吗?

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

(function(){}) 

在 javascript 中一个私有(private)函数?

最佳答案

术语“公共(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”仍然是私有(private)的吗?好吧,如果你这样做:

alert(x.getMyPrivates()());

你会看到“我的隐私!”信息。所以看起来“maybePrivate”不再那么私密了。但是,如果您再次尝试该操作,它将不起作用,因为“getMyPrivates”在第一次调用后安排自身被虚拟化。

那次窥镜之旅的目的是说明 Javascript 是动态的。唯一真正“静态”的是,一旦您将函数密封在闭包中(如上例中的“maybePrivate”),您就无法强制从外部显示它对象(至少,不是没有经过一些非常曲折的扭曲;语言是如此糊涂以至于声称某事是“不可能的”是危险的:-)。示例中的对象可以选择公开其“私有(private)”内容,但也可以选择不公开。

关于php - 私有(private)函数和公共(public)函数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2648500/

相关文章:

php - 一起使用 CSS 和 PHP

php - 使用 cron 作业每月通过 MySQL SELECT 查询更改 PHP 变量

javascript - 为什么我的下一个和上一个按钮在IOS上看起来很奇怪?

javascript - JSLint 说缺少新关键字

python - 以干净的 OOP Python 风格重写程序脚本

页面之间的 PHP session 变量

php - 通过 php domdocument 解析器获取文档元素的子元素

javascript - 为什么 `export * as Name from ' ./module'` 在 TypeScript 中不是一个东西?

javascript - 使用 Javascript 循环播放不同的多个视频

c++ - 如何打开用户输入的文件名?