2015-10-13 49 views
-1

這是我第一次嘗試使用JavaScript創建一個具有函數和屬性的類,但我無法理解爲什麼在我的代碼中ShowValue函數返回默認值而不是在通話之前設置的那個。財產沒有在運行時設置在JavaScript類

<script type="text/javascript"> 
    var $mylocalclass; 

    $(document).ready(function() { 
     $mylocalclass = myclass; 
     $mylocalclass.mypropname = "the_name_i_want_here"; 
    }); 

    var myclass = (function() { 
     var mypropname = "unspecified_name"; 

     var ShowValue = function() { 
      alert(mypropname); 
     }; 

     return { 
      ShowValue: ShowValue, 
      properties:{ 
       mypropname: mypropname 
      } 
     } 
    })(); 
</script> 

<button type="button" onclick="$mylocalclass.ShowValue();">Try Me!</button> 

我想要做的是使用不同的頁面同一類,但使用它的不同取決於本地屬性的名稱,這在我的情況下,爲本地存儲對象的關鍵。當然,如果我無法從頁面設置屬性,這將無法正常工作。

+0

我沒有看到一個'new'關鍵字在所有這樣的功能是不是作爲一個階級的工作所有.. –

+0

我看到一個錯誤在控制檯 –

+0

所有屬性都是私人和你不能像這樣訪問'mypropname' .. –

回答

0

您正在訪問函數中的私有變量mypropname。要訪問您設置的變量,請使用this

此外,你有3個變量mypropname,其中2個未使用。該

var mypropname = "unspecified_name"; 

很簡單,就是你正在使用的ShowValue回調,並在properties變量的變量集不參照其他地方的私人變量。

最後,這不是對象(或類)的實例,而是對象本身。

var $mylocalclass; 
 

 
    $(document).ready(function() { 
 
     $mylocalclass = myclass; 
 
     $mylocalclass.properties.mypropname = "the_name_i_want_here"; 
 
    }); 
 

 
    var myclass = (function() { 
 
     var mypropname = "unspecified_name"; 
 

 
     var ShowValue = function() { 
 
      alert(this.properties.mypropname); 
 
     }; 
 

 
     return { 
 
      ShowValue: ShowValue, 
 
      properties:{ 
 
       mypropname: mypropname 
 
      } 
 
     } 
 
    })();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> 
 
<button type="button" onclick="$mylocalclass.ShowValue();">Try Me!</button>

+0

這很好用,但我應該怎麼做呢?我想在外部js文件中使用'myclass',所以我可以在不同的地方使用它。我想用它作爲一個類。我把變量「mypropname」放在這個類/函數中,所以它不會「污染」全局變量。這個類共有幾個方法和屬性。 –

相關問題