2013-04-08 132 views
0

myObject有兩個函數,第一個調用第二個函數,有沒有辦法看到變量裏面的callMe()?對象內可變範圍

var myObj = { 
    callMefirst: function() { 
     var thisObj = this; 
     var a; 
     a = 'chocolate cookie'; 
     thisObj.callMe(); 
    }, 

    callMe: function() { 
     alert(a); 
    } 
} 
myObj.callMefirst(); 

否則我知道我可以通過它爲對象的全球範圍內的參數,或者設置一個變種,但我有興趣瞭解

+0

'變種this.a'將使它的地圖(對象) - 特性,並因此可以從對象中的任何方法中選擇(alert(this.a);')。 – 2013-04-08 11:40:26

回答

1

既然號被定義的範圍這種特殊情況下與var關鍵字一樣,它的作用域被定義在它所定義的函數中。因此,它只對該函數以及該函數中定義的其他函數(其中沒有任何函數)可見。

1

acallMefirst函數中定義,並且僅在此處存在。請記住,JavaScript具有功能(詞法)範圍。因此,允許callMe有權訪問a的最簡單方法將如您所建議並在myObj範圍內定義它。

0

試試這個代碼:

var myObj = { 
    a:"",  
    callMefirst: function() { 
     var thisObj = this; 
     this.a = 'chocolate cookie'; 
     thisObj.callMe(); 
    }, 

    callMe: function() { 
     alert(this.a); 
    } 
} 
myObj.callMefirst(); 
0

您可以通過多種方式做到這一點;以下使用閉包。

var myObj = (function() { 
    var a; 

    return{ 
    callMefirst: function() { 
     var thisObj = this; 
     a = 'chocolate cookie'; 
     thisObj.callMe(); 
    }, 

    callMe: function() { 
     alert(a); 
    } 
    } 
})() 
myObj.callMefirst(); 

使用與對象起始封閉:

var myObjF = function(pass) { 
    var a=pass; 

    return{ 
    callMefirst: function() { 
     var thisObj = this; 
     thisObj.callMe(); 
    }, 

    callMe: function() { 
     alert(a); 
    } 
    } 
} 
var myObj=myObjF("hello"); 
myObj.callMefirst(); 

使用功能對象:

var myObjF = function(pass) { 
    this.a=pass; 

    this.callMefirst = function() { 
     var thisObj = this; 
     thisObj.callMe(); 
    }; 
} 
myObjF.prototype.callMe = function() { 
    alert(a); 
} 

var myObj=new myObjF("hello"); 
myObj.callMefirst();