我想知道如何从JavaScript模块中的私有(private)和公共(public)函数访问公共(public)属性?

例如,如果这是我的模块:

var PersonModule = (function(){

    var sayHello = function(){
        alert("Hello " + name);
    }

    var privateChangeNameToBob = function(){
        this.name = "Bob";
    }

    var changeName = function(){
        privateChangeNameToBob();
    }

    return {
        name: "",
        sayHello: sayHello,
        changeName: changeName
    }
})();
sayHellochangeName函数均无法正常工作,因为我不知道如何访问公共(public)name属性。有没有办法做到这一点?我已经通过将私有(private)变量与getter和setter结合使用来解决此问题,但是我想知道如果没有它们,是否可以做到这一点。

最佳答案

您需要对结果对象的引用:

var PersonModule = (function(){
    function sayHello() {
        alert("Hello " + person.name);
    }
    function privateChangeNameToBob() {
        person.name = "Bob";
    }
    function changeName() {
        privateChangeNameToBob();
    }

    const person = {
        name: "",
        sayHello,
        changeName
    };
    return person;
})();

当然,考虑到您的单例IIFE模块,您也可以直接引用PersonModule.name

09-18 22:37