Advertisement
Guest User

Untitled

a guest
Dec 10th, 2016
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.20 KB | None | 0 0
  1. (function() {
  2. // 'use strict';
  3. // ^ would throw error because of `arguments.callee.caller`.
  4. var ModuleCore = function() {};
  5.  
  6. ModuleCore.prototype.html = function() {
  7. console.log(':: html');
  8. };
  9.  
  10. ModuleCore.extend = function (settings, Parent) {
  11. var parent;
  12.  
  13. if (typeof Parent !== 'undefined') {
  14. parent = new Parent();
  15. } else {
  16. parent = new ModuleCore();
  17. }
  18.  
  19. var M = function() {};
  20. M.prototype = Object.assign(parent, settings);
  21.  
  22. M.extend = function(settings) {
  23. settings.super = settings.super || function() {
  24. var caller = arguments.callee.caller;
  25. parent[caller.name].apply(this, caller.arguments);
  26. };
  27. return ModuleCore.extend.call(null, settings, M);
  28. };
  29.  
  30. return M;
  31. };
  32.  
  33. var m = ModuleCore.extend({
  34. render: function() {
  35. this.html();
  36. console.log('m1 render!', arguments);
  37. }
  38. });
  39.  
  40. var m2 = m.extend({
  41. render: function() {
  42. // `this.super()` will automaticaly 'guess'
  43. // function name ('render') as well as `arguments` value.
  44. this.super();
  45. console.log('m2 render!');
  46. }
  47. });
  48.  
  49. var foo = new m2();
  50. console.log(foo.render(1));
  51. // :: html
  52. // m1 render! [1]
  53. // m2 render!
  54. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement