JavaScript? Node+Browser? Сахарок? => qxmx-M1

14 Май
2012

JavaScript? Node? Сахарок? => qxmx-M1


Функции предоставляемые библиотекой

safecall

function safecall(funcP@{function|string} [, fallback@function])(...)

funcP — функция или строка для вызова, в случае строки аргументы при запуске можно получить через $1-$40 или arguments
fallback — обработчик при ошибке входных данных или исключения во времени выполнения

sample:
console.log(safecall("return $1+$2")(100,500)) => 600
console.log(safecall("fsdsf",function(){console.log(e)})()) => [TypeError...]


forkcall

function forkcall(funcP@{function|string} [, fallback@function])(...)

100% асинхронная версия safecall
! РЕЗУЛЬТАТ ВЫПОЛНЕНИЯ ВСЕГДА undefined

sample:
console.log(forkcall("console.log($1+$2)")(100,500)) => undefined, 600


next

function next(function(next@function, ...))

+ Использование паттерна Deferred
+ Последовательный 100% асинхронный вызов функции
+ Можно передавать аргументы по цепочке
— Есть вероятность разрыва цепочек

sample:
next(function(next){console.log(1);}).next(function(next){console.log(2)}) => 1, 2

P.S. полностью асинхронно, без хлама в стэке вызовов

Расширения класса Object

__getset__

function Object.__getset__(name@string, getter@function, setter@function)

+ Возможность создать getter/setter 1 строкой
+ Нету конфликтов с другими библиотеками
— только одновременное создание

sample:
a={}; a.__getset__("test", function(){return 10;}, function(){}); console.log(a.test) => 10


__const__

function Object.__const__(name@string, value@object) (alias "const")

+ Недоступно для редактирования
+ Доступны любые типы
— Свойство видимо

sample:
a={}; a.__const__("test", 100500); console.log(a.test) => 100500


__private__

function Object.__private__(name@string, value@object)

+ Свойство не видимо при enum
+ Нету конфликтов с другими библиотеками
+ Свойство нельзя переписать или удалить через delete
— Нельзя изменить значение кроме как удалить объект целиком

sample:

a={}; a.__private__("test", function() { return 100500; }); console.log(a.test()) => 100500


__protected__

function Object.__protected__(name@string, value@object)

+ Свойство нельзя изменить
+ Нету конфликтов с другими библиотеками
— Свойство видимо для enum
— Нельзя изменить значение кроме как удалить объект целиком

sample:
a={}; a.__protected__("test", function() { return 100500; }); console.log(a.test()) => 100500


__property__

function Object.__property__(name@string, value@function)

+ Свойство невидимо при enum
+ можно создавать аналог свойств .length просто применяя как функцию
+ Нету конфликтов с другими библиотеками
— Нельзя изменить значение кроме как удалить объект целиком

sample:

a={}; a.__property__("test", function(){return 10;}); console.log(a.test) => 10


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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/**********************************************************************************************
 qxFusion qxmx-M1 Library (part 1 of 10)
 Double license
 (Creative Commons BY-NC-SA 3.0 RU) http://creativecommons.org/licenses/by-nc-sa/3.0/deed.ru
 (EULA) mailto:owner@qxfusion (for commerical usage or other license type)
 **********************************************************************************************/
Object.defineProperty(Object.prototype, "const", {value:function (a, b) {
    return this.__const__(a, b)
}, writable:false, enumerable:false});
Object.defineProperty(Object.prototype, "__getset__",
 
    {value:function (a, b, c) {
        this.__defineGetter__(a, b);
        this.__defineSetter__(a, c);
        return this
    }, writable:false, enumerable:false});
Object.defineProperty(Object.prototype, "__const__", {value:function (a, b) {
    return this.__getset__(a, function () {
        return b
    }, function () {
    })
}, writable:false, enumerable:false});
Object.defineProperty(Object.prototype, "__private__", {value:function (a, b) {
    return
 
    Object.defineProperty(this, a, {value:b, writable:false, enumerable:false})
}, writable:false, enumerable:false});
Object.defineProperty(Object.prototype, "__protected__", {value:function (a, b) {
    return
 
    Object.defineProperty(this, a, {value:b, writable:false, enumerable:true})
}, writable:false, enumerable:false});
Object.defineProperty(Object.prototype, "__property__", {value:function (a, b) {
    return
 
    Object.defineProperty(this, a, {enumerable:false, get:function () {
        return b()
    }})
}, writable:false, enumerable:false});
Object.prototype.__property__("SuperGlobal", function () {
    return Object.isNodeRuntime ?
 
        this.GLOBAL : this
});
Object.prototype.__property__("isNodeRuntime", function () {
    return typeof this.GLOBAL != "undefined" ? true : false
});
Object.prototype.__private__("toArray", function () {
    var b = [];
    for (var c
 
        in this) {
        try {
            if (a.hasOwnProperty(c))b.push(this[c])
        } catch (d) {
        }
    }
    return;
    b
});
Object.prototype.__private__("toRawArray", function () {
    var a = [];
    for (var b in this) {
        try {
            a.push(this[b])
        } catch (c) {
        }
    }
    return
 
    a
});
Object.SuperGlobal.const("next", function (a) {
    return new function () {
        var b = this;
        var c = function () {
            var a;
            if (b.__deferred__.length) {
                a = [].slice.call(arguments);
                a.unshift(c);
                b.__deferred__[0].apply
 
                    (b, a);
                b.__deferred__.shift()
            }
        };
        this.__deferred__ = [];
        this.next = function (a) {
            this.__deferred__.push(a);
            return b
        };
        fork(a, c)
    }
});
Object.SuperGlobal.const("fork", function () {
    var a = arguments;
    (function (a) {
        return(typeof process == "object" && typeof process.nextTick == "function" ? process.nextTick : setTimeout)(function () {
            var b = Array.prototype.slice.call(a);
            b.shift();
            var c = a[0];
            c.apply(this, b)
        }, 0)
    })
 
        (a)
});
Object.SuperGlobal.const("safecall", function (pointer, fallback) {
    return function () {
        if (typeof pointer != "function" && typeof pointer != "string") {
            if (typeof fallback == "function")fallback();
            return
 
            undefined
        } else {
            try {
                return(typeof pointer == "function" ? pointer : eval("(function($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,nn$20){" + pointer.toString() + "})")).apply
 
                    (this, arguments)
            } catch (e) {
                if (typeof fallback == "function")fallback(e);
                return function () {
                    return undefined
                }
            }
        }
    }
});
Object.SuperGlobal.const("forkcall", function (a, b) {
    return function () {
        return fork
 
            (function () {
                return safecall(a, b).apply(this, arguments[0].toRawArray())
            }, arguments)
    }
})


Лицензирование:
+
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх