Как мне добавить синтаксический сахар в мою библиотеку Javascript? - PullRequest
1 голос
/ 14 апреля 2009

Прямо сейчас библиотека может перевести эту операцию

Select * from List where name = k% order by desc  

до

List.filter(function(x) { return x.first_char() == 'k' }).sort().reverse()); 

Как лучше всего удалить (), чтобы разработчик мог написать такие предложения, как:

List.filter(fn(x) { return x.first_char == 'k' }).sort.reverse;

Наивный подход:

maxfn = function() {this[0]..};  Array.prototype.max = maxfn();

Но при таком подходе я не могу получить доступ к «этому».

Я хотел добавить синтаксический сахар для

new Array("1","2","3")

что-то вроде:) (нужны предложения)

_("1","2" ,"3")

как у нас в схеме где список -> '

Я пытался клонировать аргументы, но безуспешно.

Спасибо.

Ответы [ 4 ]

2 голосов
/ 14 апреля 2009

Для списков вы можете использовать JSON запись:

["1", "2", "3"]
1 голос
/ 14 апреля 2009

Какой лучший взлом для удаления ()

Собственность получателей / установщиков в JavaScript. К сожалению, это относительно новая функция JavaScript, которая не будет работать в IE6 / 7 (а также в некоторых других более старых браузерах), поэтому она еще не готова к прайм-тайм (несмотря на введение в связанную статью).

Вы можете сделать этот конкретный пример, создав объект JavaScript, который обернет String и затемнит все методы String, а затем добавит статическое свойство first_char, установленное для первого символа String при инициализации. Но это действительно того не стоит.

new Array ("1", "2", "3")

что-то вроде:) (нужны предложения)

_ («1», «2», «3»)

Ну, это достаточно просто:

function _(/* items */) {
    var a= new Array();
    for (var i= 0; i<arguments.length; i++)
        a[i]= arguments[i];
    return a;
}

В наше время нет никакого смысла делать это, так как синтаксис литерала массива:

['1', '2', '3']

был доступен с эры JavaScript 1.1-1.2 и сегодня доступен в любом браузере. (Это предшествует JSON много-много лет.)

1 голос
/ 14 апреля 2009

Вы можете использовать нотацию JSON в соответствии с предложением Роборга, если вы управляете списком ... Однако кросс-браузерного способа обработки свойства как метода нет. Примечание: spidermonkey (firefox) поддерживает использование метода получения (метод get для свойства).

0 голосов
/ 14 апреля 2009

Я постараюсь ответить один за другим: 1) Почему вы хотите удалить скобки из вызова Functon? 2) Если «наивный» подход терпит неудачу, возможно, это потому, что вы вызываете maxFn и присваиваете результаты Array.prototype.max Должно быть так:

maxfn = function() {this[0]..};  Array.prototype.max = maxfn;

3) Роборг правильный, просто используйте буквенные обозначения для создания массивов на лету.

<ч /> Изменить:
Вот один из способов реализации функции max на объекте массива. Необязательный аргумент оценщика - это функция, которая принимает два параметра: текущее максимальное значение и текущее значение в массиве. Он должен вернуть объект, который "больше". Полезно для не примитивов.

Array.prototype.max = function(evaluator) {
    var max, i = 1; len = this.length;
    if (len > 0) max = this[0];
    for (; i < len; i++) {
        if (evaluator) {
            max = evaluator(max, this[i]);
        }
        else if(max < this[i]) {
            max = this[i];
        }
    }
    return max;
};

var a = [1, 3, 4, 5, 6];
alert(a.max());
var b = ["Arnold", "Billy", "Caesar"];
alert(b.max());
var c = ["Arnold", new Date(), 99, true];
alert(c.max());
var d = [1, 3, 4, 5, 6];
alert(d.max(function (max, val) { return max < val ? val : max }));
...