在Javascript中创建私有静态函数?

5
我正在使用以下代码创建:私有属性,私有方法,公共属性,公共方法和公共静态属性。
function ClassA() {

    var privateProperty = 'private_default_value';

    var privateMethod = function() {
        console.log("private method executed ...");
    };

    this.publicProperty = 'public_default_value'; 

    this.publicMethod = function() {
        console.log("public method executed ...");
    };

    ClassA.publicStaticProperty = "public_static_default_value";

    // How to create here: ClassA.privateStaticProperty ?

};

var instance = new ClassA();
instance.publicMethod();
console.log(ClassA.publicStaticProperty);

我该如何在这个类中创建一个私有的静态属性?
1个回答

7
这里有一个解决方案,使用立即调用函数表达式(IIFE)创建一个作用域,可以被构造函数ClassA看到:
var ClassA = (function(){

    var Constructor = function(){
        var privateProperty = "private_default_value";

        var privateMethod = function() {
            console.log("private method executed ...");
        };

        this.publicProperty = "public_default_value"; 

        this.publicMethod = function() {
            console.log("public method executed ...");
        };
    }
    Constructor.publicStaticProperty = 'public_static_default_value';
    var privateStaticProperty = "private_static_default_value";

    return Constructor;
})();

privateStaticProperty是“静态”的:只有一个属性。

privateStaticProperty是“私有的”:你不能从IIFE外部读取它。


publicStaticProperty重命名为privateStaticProperty - MBO
@MBO 那么如何在这段代码中保留旧的公共静态属性呢?你能否更新它,使其同时包含公共静态和私有静态...抱歉,我有点迷失了。 - Ashraf Bashir
顺便提一下:在大多数情况下,最好在原型上定义方法(即 Constructor.prototype.publicMethod = function()...),因为这样可以避免它们的无用复制。 - Denys Séguret
@dystroy我无法再访问我的public_property了?同样的情况也发生在类内部访问private_property上。在你的代码中,如何定义非静态的公共和非静态的私有属性? - Ashraf Bashir
@dystroy,你有一个bug,我会编辑你的答案来修复它。 - Ashraf Bashir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接