我是一名新的程序員,我從C開始,現在開始享受JavaScript和更多的PHP。最近我聽說「私人」和「公共」這兩個詞的功能很多。任何人都可以解釋這兩者以及它們對程序員的用途嗎?私人和公共職能有什麼區別?
而且我可能是完全錯誤的......在這裏不過是一個
(function(){})
在JavaScript私有函數
?
我是一名新的程序員,我從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;
}
};
})();
奇怪。所以現在「x」是一個對象,你可以看到裏面有一個「maybePrivate」函數。但是,那個名字—「maybePrivate」—對你沒有任何好處,因爲從以外 x你不能使用名稱來獲得該函數。
然而,奇怪的對象有另一個功能,被稱爲「getMyPrivates」,你可以得到它。當你調用它時,你會回到對「maybePrivate」函數的引用,然後可以使用它來調用該函數。現在,「maybePrivate」仍然是私人的嗎?那麼,如果你這樣做:
alert(x.getMyPrivates()());
你會看到「我的私人!」信息。所以它看起來像「maybePrivate」不再那麼私密。但是,如果您再次嘗試,則它不起作用,因爲「getMyPrivates」會在第一次調用它後自行排除它。
那個穿過鏡子的小旅程就是爲了說明Javascript是動態的。唯一真正「靜態」的是,一旦你封閉了一個閉包內的函數(如上例中的「maybePrivate」),你不能強迫它從外部對象(至少,而不是沒有經歷一些真正曲折的扭曲;語言是如此的糊塗,以至於聲稱某些東西是「不可能」是危險的:-)。這個例子中的對象可以選擇揭示其「私人」的東西,但它也可以選擇不要。
+1對於方法名稱x.getMyPrivates(),我是 heheh。 – leeand00 2010-04-15 20:10:14
'function(){}'是一個匿名函數。 – Gumbo 2010-04-15 19:51:29
Oh dang!我有很多要學習! – 2010-04-15 20:05:38