【发布时间】: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 {
}()))
我想要达到的目标是以下之一:
- 扩展后调用
APP.publicMethod()时,我想返回'childPrivate'而不是'private'; - 能够从扩展的公开 API 访问
_priv。
总之,我希望父模块中定义的私有变量在子模块中作为子模块的私有成员继承。
【问题讨论】:
-
使用这种结构,您无法做到这一点。
var在本地范围内声明变量,因此它们无法在外部访问。您可以将这些变量设为公开,但使用_遵循私有命名约定,就像您正在做的那样。 -
也许我可以采取不同的方法/结构,然后呢?我真的很想享受这些成员的隐私,只是添加一个
_前缀会完全破坏私有变量的目的吗? -
JavaScript 中没有可见性,一切都由闭包控制。公共变量通常带有下划线来表示它是私有的。您可以尝试传递参数。
-
如果您对我如何传递论点以实现这一目标有任何见解,我将不胜感激,因为过去几个小时我一直在尝试:)
-
前段时间我使用了一些代码来实现 JavaScript 中的“私有”成员。在这里查看stackoverflow.com/questions/17008086/…。但是,它并不像其他语言那样真正“私有”。将它们公开是可以的,在我看来没什么大不了的,至少在 JS 中是这样。
标签: javascript jquery inheritance closures private-members