Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <link href="http://www.extjs.com/deploy/dev/resources/css/ext-all.css" rel="stylesheet" type="text/css" />
  <script src="http://www.extjs.com/deploy/dev/adapter/ext/ext-base.js"></script>
  <script src="http://www.extjs.com/deploy/dev/ext-all.js"></script>
  <meta charset=utf-8 />
  <title>JS Bin</title>
</head>
<body>
  
  <p>Click the button to instantiate 2 objects and call each object 2 times:</p>
  
  <button onclick="test();">Test</button>
  
  <p>You can click the button again to repeat. You'll see that the static variable keep incresing its value.</p>
  
  <p>&nbsp;</p>
  <div id="output"></div>
</body>
</html>
 
/*global Ext*/
    Ext.ux.MyExtendedClass = Ext.extend(Ext.util.Observable, 
                                        (function() {
        // private static fields (can access only to scope: minimum privileges).
        var privStaticVar = 0;
        // private static functions (can access only to scope and arguments, but we can send them the scope by param)
        var privateFunc1 = function(me) { return me.name + ' -> ClassVar:' + privStaticVar; };
        var privateFunc2 = function(me) { return me.publicMethod1() + ' InstanceVar:' + me.getPrivateVar(); };
        return {
            constructor: function(config) {
                // privileged private/public members (can access to anything privated and public)
                var privateVar = config.v || 0;
                var privInstFunc = function() { privateVar += 1; };
                this.name = config.name;
                this.incVariables = function() { privInstFunc(); privStaticVar += 1; };
                this.getPrivateVar = function() { return privateVar; };
            },
            // public members (can access to public and private static, but not to the members defined in the constructor)
            publicMethod1: function() { this.incVariables(); return privateFunc1(this); }
        };
      }())
    );
    function test() {
      var o1 = new Ext.ux.MyExtendedClass({name: 'o1', v: 0});
      var o2 = new Ext.ux.MyExtendedClass({name: 'o2', v: 10});
      var s = o1.publicMethod2() + '<br>' + o1.publicMethod2() + '<br><br>' + o2.publicMethod2() + '<br>' + o2.publicMethod2(); 
      Ext.get("output").update(s); console.log(s);
    }
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers