pythonic JS


Python
>>>str = 'Hello ';
>>>map(lambda x: str+x, ['world!','all!'])
['Hello world!', 'Hello all!']
Функцией apply, похоже, можно замутить такое. Не соображу "как".
А мне надо приложение с минимумом HTML и максимумом JS.
Т.е. с логикой довольно хитрой.
Вряд ли ее получится сгенерить.
А ты чем генеришь?
Сообщение удалил
Это можно сделать если ты пишешь на JS кусочки кода.
А мне надо приложение с минимумом HTML и максимумом JS.
Т.е. с логикой довольно хитрой.
Вряд ли ее получится сгенерить.
А ты чем генеришь?
Да не, я некорректно выразился. Я стараюсь всю логику (вычисления к примеру) написать на питоне и максимально переиспользовать уже раз написанные js куски забитые в шаблоны. А вообще можно попытаться похимичить с simplejson чтобы с питона получать js.
function Sample(samples){
var prefix = 'Sample:';
map(function(x){alert(prefix+x);},samples);
}
var prefix = '';
var samples = new Array;
samples[0] = new Sample(['Hello', 'world!']);
И как тут?
Функцией apply, похоже, можно замутить такое. Не соображу "как".В JS встроена какая-то реализация этого:
function Hello(world){
var hello = 'hello ';
this.hello = function{alert(hello+world);};
}
var hello = new Hello('world!');
hello.hello;
'arguments' deprecated с JS 1.3Deprecated только свойство объекта Function. А объект такой внутри function в ECMAScript есть.
map какой хотел:
function map(fn){
var args = new Array;
for(i=1;i<arguments.length;i++)
args.push(arguments[i]);
fn.apply(this.caller,args);
};
Тогда:
var hello = '!';
function test{
var hello = 'hello ';
var x = 'world!';
map(function(x){alert(hello+x);},['all!']);
};
Работает. Но только в SpiderMonkey (http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference

Видимо, в IE & Opera не работает. Для IE есть аналоги?

приведенный тобой скрипт работает в ie и в opera-е. что я делают не так?
function map(fn){
for(i=1;i<arguments.length;i++)
fn.apply(this.caller,[arguments[i]]);
};
function test{
var hello = 'hello ';
map(function(x){alert(hello+x);},'World', 'all!');
};
test;
или такое
function map(fn){
for(i in arguments[1])
fn.apply(this.caller,[arguments[1][i]]);
};
function test{
var hello = 'hello ';
map(function(x){alert(hello+x);},['World', 'all!']);
};
test;
Я не заметил что у меня в map'е не то делается _вообще_.
А this.caller не нужен на самом деле, вместо него null точно так же работает (про это в предыдущем посте).
Пока причесывал свой map — сломал. Поэтому тот map который здесь вообще неправильный.
ОО, ты прав.Только на самом деле я хочу так (чтобы возвращалась последовательность применений функции, чтобы количество аргументов не было ограничено):
function map(fn){
var res = new Array;
var arr = new Array;
for(i=0;i< arguments[1].length;i++){
for(j=1;j<arguments.length;j++)
arr[j-1] = arguments[j][i];
res.push(fn.apply(null,arr;
};
return res;
};
function test{
var prefix = 'el: ';
alert(map(function(x,y){return prefix+x+y;},['foo','bar'], ['bar','foo'];
};
test;
Еще бы как-нибудь искать минимальную длину аргументов прилично...
Оставить комментарий
pilot
Как дополнить и улучшить? (Например, 'arguments' deprecated с JS 1.3)
Проверки длин массивов не считаем