2010-04-15 76 views
2

我是一名新的程序员,我从C开始,现在开始享受JavaScript和更多的PHP。最近我听说“私人”和“公共”这两个词的功能很多。任何人都可以解释这两者以及它们对程序员的用途吗?私人和公共职能有什么区别?

而且我可能是完全错误的......在这里不过是一个

(function(){}) 
在JavaScript私有函数

+3

'function(){}'是一个匿名函数。 – Gumbo 2010-04-15 19:51:29

+0

Oh dang!我有很多要学习! – 2010-04-15 20:05:38

回答

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”—对你没有任何好处,因为从以外 x你不能使用名称来获得该函数。

然而,奇怪的对象有另一个功能,被称为“getMyPrivates”,你可以得到它。当你调用它时,你会回到对“maybePrivate”函数的引用,然后可以使用它来调用该函数。现在,“maybePrivate”仍然是私人的吗?那么,如果你这样做:

alert(x.getMyPrivates()()); 

你会看到“我的私人!”信息。所以它看起来像“maybePrivate”不再那么私密。但是,如果您再次尝试,则它不起作用,因为“getMyPrivates”会在第一次调用它后自行排除它。

那个穿过镜子的小旅程就是为了说明Javascript是动态的。唯一真正“静态”的是,一旦你封闭了一个闭包内的函数(如上例中的“maybePrivate”),你不能强迫它从外部对象(至少,而不是没有经历一些真正曲折的扭曲;语言是如此的糊涂,以至于声称某些东西是“不可能”是危险的:-)。这个例子中的对象可以选择揭示其“私人”的东西,但它也可以选择不要。

+3

+1对于方法名称x.getMyPrivates(),我是 heheh。 – leeand00 2010-04-15 20:10:14