comparison src/implab/declare/override.js @ 34:27e8e9e38e07 default tip

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