【问题标题】:Confusing example of Private V.S. Public method in book <Javascript Patterns>?Private V.S. 的令人困惑的例子<Javascript Patterns> 书中的公共方法?
【发布时间】:2017-01-15 20:51:15
【问题描述】:

我最近一直在阅读 Stefanov 的 Javascript Patterns。我发现这个例子让我很困惑:

使用约定来模拟功能的另一种情况是私有成员>约定。尽管您可以在 JavaScript 中实现真正的隐私,但有时 >evelopers 会发现只使用下划线前缀来表示私有 > 方法或属性更容易。考虑以下示例:

变种人 = {

getName: 函数 () {

返回 this._getFirst() + ' ' + this._getLast(); },

_getFirst: 函数 () {

// ... },

_getLast: 函数() {

// ... }

};

在此示例中,getName() 是一个公共方法,是稳定 API 的一部分,

而 _getFirst() 和 _getLast() 是私有的。

据我了解,方法是私有的还是公共的,是由它的编写方式定义的。例如,如果我们谈论的是构造函数,那么“this.getFirst() = function(){ ... }”将是一个公共方法,其中“var getFirst=function(){...}”将是私人的。

本书中的示例不是构造函数。而且我相信不能简单地使用下划线来使方法公开或私有。那么,我们应该如何在上面例子中声明的对象中创建私有或公共方法呢?

非常感谢!

【问题讨论】:

    标签: javascript function methods private-methods public-method


    【解决方案1】:

    Javascript 没有真的 私有变量/方法。模式(下划线)只是编码约定。见MDN: Private properties。上面写着

    上述技巧(下划线)很简单,清楚地表达了意图。然而, 使用下划线前缀只是一种编码约定,而不是 由语言强制执行:没有什么可以阻止用户 直接访问应该是私有的属性。

    同时,您不能在 Object literal {...} 构造中使用 var getFirst=function(){...}

    【讨论】:

    • 感谢您的回答亚历克斯。这消除了我的困惑。
    【解决方案2】:

    它看起来像是在说 getName();是与私有数据成员函数在同一类中的访问器。

    【讨论】:

    • 一个访问器函数被创建来访问私有成员而不改变/改变值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 2013-01-04
    • 1970-01-01
    • 2018-06-08
    相关资源
    最近更新 更多