2009-04-14 1 views
1

Сейчас библиотека может перевести эту операциюКак добавить синтаксический сахар в мою библиотеку Javascript?

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") 

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

I пытался клонировать аргументы, но не удался.

Спасибо.

ответ

2

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

["1", "2", "3"] 
+0

будет ли успех в эффективности? – unj2

+0

На самом деле, я думаю, что теоретически это лучше по эффективности –

+0

Разве это не просто буква массива? –

0

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

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

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


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

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 })); 
+0

Первый не работал. Если я выполняю alert (array1.max), он возвращает неопределенный. Я думаю, это потому, что maxfn понятия не имеет, что это такое. Могу ли я обойти это, используя .apply? – unj2

+0

Обратите внимание, что maxfn является функцией. Оператор array1.max возвращает указатель на функцию. Однако, поскольку вы получаете неопределенные значения, у array1, вероятно, нет свойства с именем max. – Helgi

1

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

1

Что лучший хак, чтобы удалить()

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

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

новый 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; 
} 

Там нет смысла делать это в настоящее время, хотя, так как массив буквального синт ntax:

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

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

+0

Мой первый подход состоял в том, чтобы скопировать все аргументы, после чего я подумал о клонировании аргументов. Но да, ребята, вы правы, [] намного чище. – unj2

 Смежные вопросы

  • Нет связанных вопросов^_^