设置与函数参数同名的Javascript私有变量?

时间:2011-02-14 20:02:40

标签: javascript private javascript-objects

function Foo() {
    var myPrivateBool = false,
        myOtherVar;
    this.bar = function(myOtherVar) {
        myPrivateBool = true;
        myOtherVar = myOtherVar; // ?????????????????
    };
}

如何设置私有变量myOtherVar?

5 个答案:

答案 0 :(得分:3)

为参数指定一个不同的名称:

    function Foo() {
        var myPrivateBool = false,
            myOtherVar;
        this.bar = function( param ) {
            myPrivateBool = true;
            myOtherVar = param;
        };
        this.baz = function() {
            alert( myOtherVar );
        };
    }


var inst = new Foo;

inst.bar( "new value" );

inst.baz();  // alerts the value of the variable "myOtherVar"

http://jsfiddle.net/efqVW/


如果您愿意,可以创建一个私人函数来设置值。

function Foo() {
    var myPrivateBool = false,
        myOtherVar;
    function setMyOtherVar( v ) {
        myOtherVar = v;
    }
    this.bar = function(myOtherVar) {
        myPrivateBool = true;
        setMyOtherVar( myOtherVar );
    };
    this.baz = function() {
        alert(myOtherVar);
    };
}


var inst = new Foo;

inst.bar("new value");

inst.baz();

http://jsfiddle.net/efqVW/1/

答案 1 :(得分:1)

在JavaScript中,约定将私有变量的名称加_(下划线)作为前缀。 遵循此约定,您可以将代码更改为。

function Foo() {
    var _myPrivateBool = false,_myOtherVar;
    this.bar = function(myOtherVar) {
        _myPrivateBool = true;
        _myOtherVar = myOtherVar;
    };
}

在上面的代码中,我们将局部变量myOtherVar分配给私有变量_myOtherVar。 这样看来,我们的私有变量和局部变量具有相同的名称。

注意:这只是遵循的约定。在变量名前加上_并不能使其成为私有变量。

答案 2 :(得分:-1)

我认为这是.myOthervar = myOtherVar;将损坏全局命名空间并在窗口对象

中创建一个变量window.myOtherVar

答案 3 :(得分:-2)

尝试this.myOtherVar = myOtherVar;

答案 4 :(得分:-2)

也许您可以将myOtherVar声明为MyOtherVar,利用javascript的区分大小写,然后将MyOtherVar = myOtherVar分配到函数中:

function Foo() {
    var MyPrivateBool = false,
        MyOtherVar;
    this.bar = function(myOtherVar) {
        MyPrivateBool = true;
        MyOtherVar = myOtherVar;
    };
}