comparison src/implab/declare/override.js @ 5:3d124d0b9078

improved declare/override, added override.before, override.after, override.hide, inherited.arguments.
author cin
date Fri, 16 Jun 2017 02:14:25 +0300
parents fc2517695ee1
children 9663631cbdb9
comparison
equal deleted inserted replaced
4:fcc63f34d0a2 5:3d124d0b9078
1 "use strict"; 1 "use strict";
2 define([], function () { 2 define([], function () {
3 var slice = Array.prototype.slice; 3 var slice = Array.prototype.slice;
4 return function (method) { 4 var override = function (method) {
5 var proxy; 5 var proxy;
6 6
7 /** @this target object */ 7 /** @this target object */
8 proxy = function () { 8 proxy = function () {
9 var me = this; 9 var me = this;
10 var inherited = (this.getInherited && this.getInherited(proxy.nom, { 10 var inherited = (this.getInherited && this.getInherited(proxy.nom, {
11 callee: proxy 11 callee: proxy
12 })) || function () {}; 12 })) || function () {};
13
14 inherited.arguments = arguments;
13 15
14 method.apply(me, [function () { 16 return method.apply(me, [function () {
15 return inherited.apply(me, arguments); 17 return inherited.apply(me, arguments);
16 }].concat(slice.apply(arguments))); 18 }].concat(slice.apply(arguments)));
17 }; 19 };
18 20
19 proxy.method = method; 21 proxy.method = method;
20 proxy.overrides = true; 22 proxy.overrides = true;
21 23
22 return proxy; 24 return proxy;
23 }; 25 };
26
27 override.before = function (method) {
28 var proxy;
29
30 /** @this target object */
31 proxy = function () {
32 var me = this;
33 var inherited = (this.getInherited && this.getInherited(proxy.nom, {
34 callee: proxy
35 })) || function () {};
36
37
38 method.apply(me, arguments);
39 return inherited.apply(me, arguments);
40 };
41
42 proxy.method = method;
43 proxy.overrides = true;
44
45 return proxy;
46 };
47
48 override.after = function (method) {
49 var proxy;
50
51 /** @this target object */
52 proxy = function () {
53 var me = this;
54 var inherited = (this.getInherited && this.getInherited(proxy.nom, {
55 callee: proxy
56 })) || function () {};
57
58 inherited.apply(me, arguments);
59
60 return method.apply(me, arguments);
61 };
62
63 proxy.method = method;
64 proxy.overrides = true;
65
66 return proxy;
67 };
68
69 override.hide = function (method) {
70 method.overrides = false;
71 return method;
72 };
73
74 return override;
24 }); 75 });