如何从JavaScript模块中的私有和公共函数访问公共属性?

jab*_*abe 2 javascript

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

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

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
    }   
})();
Run Code Online (Sandbox Code Playgroud)

无论sayHellochangeName功能正常工作,因为我不知道如何访问公共name属性.有没有办法做到这一点?我通过使用带有getter和setter的私有变量来解决它,但我想知道如果没有它们我是否可以做到.

Ber*_*rgi 5

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

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

    const person = {
        name: "",
        sayHello,
        changeName
    };
    return person;
})();
Run Code Online (Sandbox Code Playgroud)

当然,考虑到你的单件IIFE模块,你也可以PersonModule.name直接参考.