Crockford解释私人财产

时间:2010-12-13 11:42:23

标签: javascript private

我从Crockford网站上读到了这个:private Javascript variables

但我对他的术语感到困惑:

他说:

  

对象的成员都是   公众成员`this.membername =   值;

后:

  

无法访问私有变量   到外面,也不是   对象自己的公众可以访问   方法

然后:

  

特权方法可以访问   私有变量和方法,以及   本身可以向公众开放   方法和外部

所以似乎特权方法与公共方法不同,但如果我这样做:

function S()
{
   var a = 11; // PRIVATE
   this.get = function() { return a; }; // PUBLIC AND PRIVILEGED???
}

new S().get();

get方法是公共方法,也是特权方法......所以 当他说公共方法无法访问私人成员他有什么关系?

感谢。

3 个答案:

答案 0 :(得分:3)

get能够访问a的唯一方法是通过闭包,这样才能有效地使其成为特权方法。它是否公开与 特权的事实无关。

答案 1 :(得分:1)

要专门回答有关公共方法的问题,因为您似乎理解了特权的想法,请从您的示例中考虑:

S.prototype.something = function ...

这是公开的,但不是特权,因为它无法访问私有变量a

答案 2 :(得分:0)

您可以获得a的私有成员S的值并不意味着您可以“访问”a。例如,除非提供类似a的方法,否则您无法更改set的值。您将获得一个方法(一个接口,如果可能的话)get,它是“受欢迎的”以获得a的值,该值是S的私有成员。