我试图弄清楚如何在类上有一个由公共方法的参数设置的私有实例变量。在这种情况下,似乎在somePublicMethod myPrivateVar之外将是未定义的。如何实现我想要做的事情?

MyClass = function() {
    var myPrivateVar;

    this.somePublicMethod(myPrivateVar) {
        myPrivateVar = myPrivateVar //????
    }

    this.someOtherPublicMethod() {
        somePrivateMethod();
    }

    function somePrivateMethod() {
        myPrivateVar++;
    }
}

最佳答案

问题是您通过给参数一个相同的名称来遮盖var myPrivateVar,因此只有参数变量在范围内:

this.somePublicMethod = function(myPrivateVar) {
    myPrivateVar = myPrivateVar; // sets the argument to itself
}


您需要给其中一个起一个不同的名称,以免产生阴影:

this.somePublicMethod = function(inputVar) {
    myPrivateVar = inputVar;
};


否则,您将需要以某种方式包含其中之一:

MyClass = function () {
    var locals = {
        myPrivateVar: null
    };

    this.somePublicMethod = function (myPrivateVar) {
        locals.myPrivateVar = myPrivateVar;
    };

    function somePrivateMethod() {
        locals.myPrivateVar++;
    }
};

07-25 23:09