一千萬個為什麽

搜索

私人和公共職能有什麽區別?

我是一名新程序員,我從C開始,現在開始享受JavaScript和一點點PHP。最近我聽到了“私人”和“公共”這兩個詞的功能。任何人都可以解釋這兩者以及它們對程序員的用處嗎?

我可能在這裏完全錯了......但是是

(function(){}) 

在JavaScript中的私人功能?

最佳答案

“公共”和“私人”這兩個詞並不適合Javascript。關鍵是:你有辦法引用你知道存在的某些功能嗎?也就是說,您可以通過名稱(直接或作為您可以參考的另一個對象的屬性)來引用它嗎?如果是這樣,恭喜你,你可以調用這個功能。如果沒有,那麽你不能。

這意味著函數的“公共性”不是靜態的,因為它在Java或C之類。考慮:

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

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

Weird. So now "x" is an object, and you can see that there's a "maybePrivate" function in there. However, that name — "maybePrivate" — doesn't do you any good, because from outside x you can't use the name to get to the function.

但是,這個奇怪的對象有另一個函數,稱為“getMyPrivates”,你可以到達它。當你調用它時,你會得到對“maybePrivate”函數的引用,然後你可以使用它來調用該函數。現在,“maybePrivate”仍然是私人的嗎?好吧,如果你這樣做:

alert(x.getMyPrivates()());

你會看到“我的私人!”信息。所以看起來“maybePrivate”不再那麽私密了。但是,如果再次嘗試 ,它將無法正常工作,因為“getMyPrivates”會在第一次調用後安排自己進行抖動。

通過鏡子的那次小旅行的目的是說明Javascript是動態的。唯一真正“靜態”的是,一旦你在封閉內部封閉了一個函數(比如上面例子中的“maybePrivate”),就不能強迫它從外面顯示對象(至少,並非沒有經歷過一些真正扭曲的扭曲;語言如此糊塗以至於聲稱某些東西“不可能”是危險的:-)。示例中的那個對象可以選擇顯示其“私有”內容,但也可以選擇不這樣做。

轉載註明原文: 私人和公共職能有什麽區別?