PageRenderTime 70ms CodeModel.GetById 41ms app.highlight 3ms RepoModel.GetById 1ms app.codeStats 0ms

/static/scripts/class.js

https://bitbucket.org/h_morita_dbcls/galaxy-central
JavaScript | 80 lines | 39 code | 21 blank | 20 comment | 5 complexity | 0a7e205be1ebe70f0430b507b141e028 MD5 | raw file
 1/*!
 2 *  Class definition
 3 *
 4 *  Copyright (c) 2008 John Resig (http://ejohn.org/blog/simple-javascript-inheritance/)
 5 *  Inspired by base2 and Prototype
 6 */
 7
 8"use strict";
 9
10(function () {
11
12    var initializing = false, 
13    
14        fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;
15    
16    // The base Class implementation (does nothing) 
17    this.Class = function(){};
18        
19    // Create a new Class that inherits from this class
20    Class.extend = function (prop)
21    {
22        var _super = this.prototype;
23        
24        // Instantiate a base class (but only create the instance, don't run the init constructor)
25        initializing = true;
26        
27        var prototype = new this();
28        
29        initializing = false;
30        
31        // Copy the properties over onto the new prototype
32        for (var name in prop) 
33        {
34        
35            // Check if we're overwriting an existing function
36            prototype[name] = (typeof prop[name] === "function" && typeof _super[name] === "function" && fnTest.test(prop[name]) ?
37            
38                (function(name, fn)
39                {
40                    return function()
41                    {
42                        var tmp = this._super;
43        
44                        // Add a new ._super() method that is the same method
45                        // but on the super-class
46                        this._super = _super[name];
47                        
48                        // The method only need to be bound temporarily, so we
49                        // remove it when we're done executing
50                        var ret = fn.apply(this, arguments);        
51                        this._super = tmp;
52                        
53                        return ret;
54                    };
55                }(name, prop[name])) : prop[name]);
56        }
57
58        // The dummy class constructor
59        function Class()
60        {
61            // All construction is actually done in the init method
62            if (!initializing && this.init)
63            {
64                this.init.apply(this, arguments);
65            }
66        }
67        
68        // Populate our constructed prototype object
69        Class.prototype = prototype;
70        
71        // Enforce the constructor to be what we expect
72        Class.constructor = Class;
73        
74        // And make this class extendable
75        Class.extend = arguments.callee;
76        
77        return Class;
78    };
79    
80}());