| @@ -5,5 +5,9 | |||||
| 5 | "**/.project": true, | 
             | 
        5 | "**/.project": true, | |
| 6 | "**/.settings": true, | 
             | 
        6 | "**/.settings": true, | |
| 7 | "**/.factorypath": true | 
             | 
        7 | "**/.factorypath": true | |
| 8 | } | 
             | 
        8 | }, | |
| 
             | 
        9 | "cSpell.words": [ | |||
| 
             | 
        10 | "djbase", | |||
| 
             | 
        11 | "djclass" | |||
| 
             | 
        12 | ] | |||
| 9 | } No newline at end of file | 
             | 
        13 | } | |
| @@ -859,6 +859,12 | |||||
| 859 | "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", | 
             | 
        859 | "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", | |
| 860 | "dev": true | 
             | 
        860 | "dev": true | |
| 861 | }, | 
             | 
        861 | }, | |
| 
             | 
        862 | "requirejs": { | |||
| 
             | 
        863 | "version": "2.3.6", | |||
| 
             | 
        864 | "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", | |||
| 
             | 
        865 | "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", | |||
| 
             | 
        866 | "dev": true | |||
| 
             | 
        867 | }, | |||
| 862 | "resolve": { | 
             | 
        868 | "resolve": { | |
| 863 | "version": "1.17.0", | 
             | 
        869 | "version": "1.17.0", | |
| 864 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", | 
             | 
        870 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", | |
| @@ -29,6 +29,7 | |||||
| 29 | "eslint": "6.8.0", | 
             | 
        29 | "eslint": "6.8.0", | |
| 30 | "tslint": "^6.1.3", | 
             | 
        30 | "tslint": "^6.1.3", | |
| 31 | "typescript": "4.0.2", | 
             | 
        31 | "typescript": "4.0.2", | |
| 32 | "yaml": "~1.7.2" | 
             | 
        32 | "yaml": "~1.7.2", | |
| 
             | 
        33 | "requirejs": "2.3.6" | |||
| 33 | } | 
             | 
        34 | } | |
| 34 | } | 
             | 
        35 | } | |
| @@ -14,11 +14,11 export interface AbstractConstructor<T = | |||||
| 14 | interface DjMockConstructor<T = {}> { | 
             | 
        14 | interface DjMockConstructor<T = {}> { | |
| 15 | new(...args: any[]): T; | 
             | 
        15 | new(...args: any[]): T; | |
| 16 | mock: boolean; | 
             | 
        16 | mock: boolean; | |
| 17 | base: AbstractConstructor; | 
             | 
        17 | bases: AbstractConstructor[]; | |
| 18 | } | 
             | 
        18 | } | |
| 19 | 
             | 
        19 | |||
| 20 | export function djbase<T>( | 
             | 
        20 | export function djbase<T>( | |
| 21 | b0: AbstractConstructor<T> | 
             | 
        21 | b0?: AbstractConstructor<T> | |
| 22 | ): DeclareConstructor<T>; | 
             | 
        22 | ): DeclareConstructor<T>; | |
| 23 | 
             | 
        23 | |||
| 24 | export function djbase<T0, T1>( | 
             | 
        24 | export function djbase<T0, T1>( | |
| @@ -96,11 +96,11 export function djbase(...bases: any[]): | |||||
| 96 | 
             | 
        96 | |||
| 97 | const t = class { | 
             | 
        97 | const t = class { | |
| 98 | static mock: boolean; | 
             | 
        98 | static mock: boolean; | |
| 99 | static base: AbstractConstructor; | 
             | 
        99 | static bases: AbstractConstructor[]; | |
| 100 | }; | 
             | 
        100 | }; | |
| 101 | 
             | 
        101 | |||
| 102 | t.mock = true; | 
             | 
        102 | t.mock = true; | |
| 103 | 
            
                t.base =  | 
        
             | 
        103 | t.bases = bases; | |
| 104 | 
             | 
        104 | |||
| 105 | return t as any; | 
             | 
        105 | return t as any; | |
| 106 | } | 
             | 
        106 | } | |
| @@ -122,7 +122,9 export function djclass<T extends Abstra | |||||
| 122 | // проверка того, что класс унаследован от специальной заглушки | 
             | 
        122 | // проверка того, что класс унаследован от специальной заглушки | |
| 123 | if (isMockConstructor(bc)) { | 
             | 
        123 | if (isMockConstructor(bc)) { | |
| 124 | // t - базовый класс, объявленный при помощи dojo/_base/declare | 
             | 
        124 | // t - базовый класс, объявленный при помощи dojo/_base/declare | |
| 125 | const t = bc.base; | 
             | 
        125 | const t = bc.bases; | |
| 
             | 
        126 | ||||
| 
             | 
        127 | const cls = declare(bc.bases, target.prototype); | |||
| 126 | 
             | 
        128 | |||
| 127 | // bc - базовый класс, bc.prototype используется как super | 
             | 
        129 | // bc - базовый класс, bc.prototype используется как super | |
| 128 | // при вызове базовых методов. Нужно создать bc.prototype | 
             | 
        130 | // при вызове базовых методов. Нужно создать bc.prototype | |
| @@ -132,7 +134,7 export function djclass<T extends Abstra | |||||
| 132 | // класса, но super.some_method будет использовать именно его. | 
             | 
        134 | // класса, но super.some_method будет использовать именно его. | |
| 133 | // в этом объекте будут размещены прокси для переопределенных | 
             | 
        135 | // в этом объекте будут размещены прокси для переопределенных | |
| 134 | // методов. | 
             | 
        136 | // методов. | |
| 135 | 
            
                    bp = bc.prototype = Object.create( | 
        
             | 
        137 | bp = bc.prototype = Object.create(cls.prototype); | |
| 136 | bp.constructor = bc; | 
             | 
        138 | bp.constructor = bc; | |
| 137 | 
             | 
        139 | |||
| 138 | // proxy - фабрика для создания прокси-методов, которые внутри | 
             | 
        140 | // proxy - фабрика для создания прокси-методов, которые внутри | |
| @@ -153,14 +155,12 export function djclass<T extends Abstra | |||||
| 153 | each(target.prototype, (m: any, p: string | number | symbol) => { | 
             | 
        155 | each(target.prototype, (m: any, p: string | number | symbol) => { | |
| 154 | if (typeof m === "function" && | 
             | 
        156 | if (typeof m === "function" && | |
| 155 | p !== "constructor" && | 
             | 
        157 | p !== "constructor" && | |
| 156 | 
            
                            target.prototype.hasOwnProperty(p) | 
        
             | 
        158 | target.prototype.hasOwnProperty(p) | |
| 157 | p in t.prototype | 
             | 
        |||
| 158 | ) { | 
             | 
        159 | ) { | |
| 159 | bp[p] = proxy(m); | 
             | 
        160 | bp[p] = proxy(m); | |
| 160 | } | 
             | 
        161 | } | |
| 161 | }); | 
             | 
        162 | }); | |
| 162 | 
             | 
        163 | |||
| 163 | const cls = declare(t, target.prototype); | 
             | 
        |||
| 164 | // TODO mixin static members | 
             | 
        164 | // TODO mixin static members | |
| 165 | return cls as any; | 
             | 
        165 | return cls as any; | |
| 166 | } else { | 
             | 
        166 | } else { | |
        
        General Comments 0
    
    
  
  
                      You need to be logged in to leave comments.
                      Login now
                    
                