2015-10-13 50 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”放在这个类/函数中,所以它不会“污染”全局变量。这个类共有几个方法和属性。 –

相关问题