簡體   English   中英

設置與函數參數同名的 Javascript 私有變量?

[英]Setting a Javascript Private Variable with the same name as a Function Parameter?

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

如何設置私有變量 myOtherVar?

給參數一個不同的名字:

    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/

在 JavaScript 中,使用 _(下划線)作為私有變量名稱的前綴是一種約定。 按照此約定,您可以將代碼更改為。

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

在上面的代碼中,我們將局部變量 myOtherVar 分配給私有變量 _myOtherVar。 這樣看起來我們的私有變量和局部變量名稱相同。

注意:這只是遵循的約定。使用 _ 前綴變量名稱不會使其成為私有變量。

我認為 this.myOthervar = myOtherVar; 將破壞全局命名空間並在 window 對象中創建一個變量 window.myOtherVar

也許您可以將 myOtherVar 聲明為 MyOtherVar,利用 javascript 區分大小寫的優勢,然后將 MyOtherVar=myOtherVar 分配給函數:

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

試試this.myOtherVar = myOtherVar;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM