如果我理解正确,根据 Douglas Crockford http://javascript.crockford.com/private.html,“特权”方法类似于我们所知的“公共”方法。和“公共”方法有点不同。
我是这样理解的:
“特权”方法可以访问私有变量,因为它是在定义其余私有变量时在闭包内定义的。
var C = function(){ var private; this.privilegedMethod = function(){ /* blah blah */ }; } var cObj = new C();
“公共”方法是通过原型添加到对象本身之外的对象的方法。
var C = function(){ /* blah blah */ } C.prototype.publicMethod = function(){ /* blah blah */ }; var cObj = new C();
我发现这些“特权”和“公共”的定义非常令人困惑。我认为“特权”方法实际上是一种公共方法,正如我们从面向对象编程中所知道的那样。而且我认为“公共”方法应该被命名为其他方法。如果你仔细想想,它是一种奇怪的函数,它是对象的成员,但它不能访问任何其他私有变量,这意味着它对封装没有贡献。它几乎就像对象的独立辅助方法。
所以我想知道,为什么道格拉斯·克罗克福德会提出这些令人困惑的术语?为什么 javascript 社区采用了这些术语?或者如果我对某事有误,请纠正我。