Guest User

Untitled

a guest
May 13th, 2013
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.99 KB | None | 0 0
  1. /* Simple JavaScript Inheritance
  2. * By John Resig http://ejohn.org/
  3. * MIT Licensed.
  4. */
  5. // Inspired by base2 and Prototype
  6. (function(){
  7. var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;
  8.  
  9. // The base Class implementation (does nothing)
  10. this.Class = function(){};
  11.  
  12. // Create a new Class that inherits from this class
  13. Class.extend = function(prop) {
  14. var _super = this.prototype;
  15.  
  16. // Instantiate a base class (but only create the instance,
  17. // don't run the init constructor)
  18. initializing = true;
  19. var prototype = new this();
  20. initializing = false;
  21.  
  22. // Copy the properties over onto the new prototype
  23. for (var name in prop) {
  24. // Check if we're overwriting an existing function
  25. prototype[name] = typeof prop[name] == "function" &&
  26. typeof _super[name] == "function" && fnTest.test(prop[name]) ?
  27. (function(name, fn){
  28. return function() {
  29. var tmp = this._super;
  30.  
  31. // Add a new ._super() method that is the same method
  32. // but on the super-class
  33. this._super = _super[name];
  34.  
  35. // The method only need to be bound temporarily, so we
  36. // remove it when we're done executing
  37. var ret = fn.apply(this, arguments);
  38. this._super = tmp;
  39.  
  40. return ret;
  41. };
  42. })(name, prop[name]) :
  43. prop[name];
  44. }
  45.  
  46. // The dummy class constructor
  47. function Class() {
  48. // All construction is actually done in the init method
  49. if ( !initializing && this.init )
  50. this.init.apply(this, arguments);
  51. }
  52.  
  53. // Populate our constructed prototype object
  54. Class.prototype = prototype;
  55.  
  56. // Enforce the constructor to be what we expect
  57. Class.prototype.constructor = Class;
  58.  
  59. // And make this class extendable
  60. Class.extend = arguments.callee;
  61.  
  62. return Class;
  63. };
  64. })();
Advertisement
Add Comment
Please, Sign In to add comment