proto

webix.proto([see official doc])

webix.proto helper.

Please look into the linked official documentation.

References

helpers
assert(), isUndefined(), log().

External references

Official documentation page.

Code

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
webix.proto = function(){

    if (webix.debug_proto)
        webix.log("Proto chain:"+arguments[0].name+"["+arguments.length+"]");

    var origins = arguments;
    var compilation = origins[0];
    var has_constructor = !!compilation.$init;
    var construct = [];

    webix.assert(compilation,"Invalid mixing target");

    for (var i=origins.length-1; i>0; i--) {
        webix.assert(origins[i],"Invalid mixing source");
        if (typeof origins[i]== "function")
            origins[i]=origins[i].prototype;
        if (origins[i].$init)
            construct.push(origins[i].$init);
        if (origins[i].defaults){
            var defaults = origins[i].defaults;
            if (!compilation.defaults)
                compilation.defaults = {};
            for (var def in defaults)
                if (webix.isUndefined(compilation.defaults[def]))
                    compilation.defaults[def] = defaults[def];
        }
        if (origins[i].type && compilation.type){
            for (var def in origins[i].type)
                if (!compilation.type[def])
                    compilation.type[def] = origins[i].type[def];
        }

        for (var key in origins[i]){
            if (!compilation[key] && compilation[key] !== false)
                compilation[key] = origins[i][key];
        }
    }

    if (has_constructor)
        construct.push(compilation.$init);


    compilation.$init = function(){
        for (var i=0; i<construct.length; i++)
            construct[i].apply(this, arguments);
    };
    if (compilation.$skin)
        compilation.$skin();

    var result = function(config){
        this.$ready=[];
        webix.assert(this.$init,"object without init method");
        this.$init(config);
        if (this._parseSettings)
            this._parseSettings(config, this.defaults);
        for (var i=0; i < this.$ready.length; i++)
            this.$ready[i].call(this);
    };
    result.prototype = compilation;

    compilation = origins = null;
    return result;
};
//creates function with specified "this" pointer