我不是一个专业的Javascript开发人员,所以我的经验仅限于使用在线教程以及反复试验的个人项目。我最近刚需要创建一个有自己的方法和成员变量等的对象。我一直在阅读Doug Crockford的笔记和其他东西,但我很难理解它们是如何组合在一起的。
请考虑以下代码:
var CLASS_VAR = "some_val";
function MyClass(opts) {
this.options = opts;
this.myContainer = null;
}
MyClass.prototype.doIt = function() {
var privateMethod = function(options) {
var container = document.createElement("div");
// use CLASS_VAR and 'options' in some way
return container;
}
this.myContainer = privateMethod(this.options);
}
这实际上是我的一部分代码使用的模式,但我不知道它是否有效或正确。这种模式是一个好主意,还是有更合理/有效/正确的方法来实现同样的目标?在我的实际代码中,doIt
中有多个私有函数。此外,实际代码中有~50个“类”变量,所以我应该将它们保留在全局范围内,还是有一些方法可以像Java private static final
那样使它们成为私有类变量?
已编辑以反映第一条评论
答案 0 :(得分:1)
“@ plalx这就是我真正想要的,我想。你看,我实际上有4或5个函数在doIt里面(显然它没有被称为那个),这些函数比例子长很多。如果我是提取所有内容并将所有内容都放入其中它会有点混乱。“
好吧,如果这些函数只是在doIt
中使用,你可以这样做:
MyClass.prototype.doIt = (function() {
function privateMethod(options) {
var container = document.createElement("div");
// use CLASS_VAR and 'options' in some way
return container;
}
function someOtherPrivateMethod() {}
return function () {
this.myContainer = privateMethod(this.options);
};
})();
答案 1 :(得分:0)
在您提供的示例中,没有任何“真正的”私有方法。方法'privateMethod'只是'doIt'方法的标准成员。
如果你需要创建真正的私人成员 - 以下是Javascript模式的优秀指南(我建议你从'Revealing'模式开始,并从那里开始): Javascript Design Patterns