【问题标题】:“Private” properties inheritance in JavascriptJavascript 中的“私有”属性继承
【发布时间】:2013-09-04 10:53:26
【问题描述】:

我想用模块化模式来构建我的 javascript 应用程序,如下所示:

APP = (function() {
    // Private stuff
    var _privateVariable = 'private',
        _priv = 'priv'

    _privateMethod = function(){ /* */ };

    // Exposed API
    return {
        publicVariable : 'public',
        publicMethod   : function(){ 
             return _privateVariable
        };
    }());

然后我希望能够通过 plugin-like 模块扩展应用程序;例如,使用 jQuery:

$.extend(true, APP, (function() {
    // Child private stuff
    var _privateVariable = 'childPrivate',

    // Exposed API
    return {

    }()))

我想要达到的目标是以下之一:

  1. 扩展后调用APP.publicMethod()时,我想返回'childPrivate'而不是'private'
  2. 能够从扩展的公开 API 访问 _priv

总之,我希望父模块中定义的私有变量在子模块中作为子模块的私有成员继承。

【问题讨论】:

  • 使用这种结构,您无法做到这一点。 var 在本地范围内声明变量,因此它们无法在外部访问。您可以将这些变量设为公开,但使用 _ 遵循私有命名约定,就像您正在做的那样。
  • 也许我可以采取不同的方法/结构,然后呢?我真的很想享受这些成员的隐私,只是添加一个_ 前缀会完全破坏私有变量的目的吗?
  • JavaScript 中没有可见性,一切都由闭包控制。公共变量通常带有下划线来表示它是私有的。您可以尝试传递参数。
  • 如果您对我如何传递论点以实现这一目标有任何见解,我将不胜感激,因为过去几个小时我一直在尝试:)
  • 前段时间我使用了一些代码来实现 JavaScript 中的“私有”成员。在这里查看stackoverflow.com/questions/17008086/…。但是,它并不像其他语言那样真正“私有”。将它们公开是可以的,在我看来没什么大不了的,至少在 JS 中是这样。

标签: javascript jquery inheritance closures private-members


【解决方案1】:

使用这种结构,您无法做到这一点。 看看 John Resig 关于如何在 javascript 中实现继承的精彩帖子: http://ejohn.org/blog/simple-javascript-inheritance/

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 2012-02-28
    • 2017-08-13
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 2013-06-25
    • 1970-01-01
    相关资源
    最近更新 更多