![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|||||
|
2Nox Noctis
Извиняюсь, просто не тот код вставил Я отвечал наЦитата:
function orderBy (field) {
fld = field;
order = function(a, b) {
v1 = Number(a[fld]);
v2 = Number(b[fld]);
if (v1 < v2) {
return -1;
} else if (v1 > v2) {
return 1;
} else {
return 0;
}
}
return order;
}
function retrace (what) {
trace ("");
for (var i = 0; i<what.length; i++) {
trace (i+" :: "+"{x: "+what[i].x+" ; y: "+what[i].y+"}");
}
}
//
test = [{x:150, y:20}, {x:50, y:30}, {x:200, y:10}, {x:10, y:60}, {x:100, y:50}];
//
retrace(test);
test.sort(orderBy("x"));
retrace(test);
__________________
Two beer or not two beer?... Последний раз редактировалось SPV; 24.04.2002 в 12:47. |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
мм...
хорошо, про динамическое создание функции я все понял... спасибо john'у и SPV... остается только постучать головой обо что нибудь твердое и поудивляться как я сам не догадался... :))) а теперь полюбуйтесь до чего дошел мой маразм вчера вечером :D сортировка массива объектов-точек со свойствами икс и игрек: _global.fakeArray = function(victim) {
var forgery = [], mold = "000";
for (var i = 0; i<victim.length; i++) {
forgery.push({});
forgery[i].x = mold.substr(0, 3-String(victim[i].x).length)+victim[i].x;
forgery[i].y = mold.substr(0, 3-String(victim[i].y).length)+victim[i].y;
}
return forgery;
};
_global.exposeArray = function(victim) {
var truth = [], rank;
for (var i = 0; i<victim.length; i++) {
truth.push({});
rank = (victim[i].x.charAt(0) == "0") ? ((victim[i].x.charAt(1) == "0") ? (2) : (1)) : (0);
truth[i].x = Number(victim[i].x.substr(rank));
rank = (victim[i].y.charAt(0) == "0") ? ((victim[i].y.charAt(1) == "0") ? (2) : (1)) : (0);
truth[i].y = Number(victim[i].y.substr(rank));
}
return truth;
};
function sortByField(source, fieldName) {
var fake = fakeArray(source);
fake.sortOn(fieldName);
var real = exposeArray(fake);
return real;
}
//
test = [{x:600, y:20}, {x:500, y:20}, {x:0, y:20}, {x:300, y:20}, {x:100, y:20}, {x:400, y:20}, {x:200, y:20}];
test = sortByField(test, "x");
...правда по большей части я это лепил из спортивного интереса :D Последний раз редактировалось Nox Noctis; 24.04.2002 в 17:44. |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
2john
.... var param = arguments.callee.param; ...и потом sortOn_function.param = param; ... эээ.... это ты что имел в виду ? :))) если верить хэлпу, то arguments.callee - это ссылка на текущую вызванную функцию... и взятие у этой ссылки свойств есть нечто весьма странное... к тому же эти строчки совсем не нужны (да они и не действуют на самом деле) - все равно в качестве имени поля подставится то, которое передано во внешнюю функцию... |
|
|||||
|
МЕГАФЛЭШЕР
Регистрация: May 1999
Адрес: Россия, Москва
Сообщений: 1,181
|
Цитата:
![]() какая внешняя функция, если только обявлять параметр глобально как сдалал уважаемый SPV, то конечно будет видно, но если делать нормально, то функция (Array.sort) уже рутовая функция, и к локальным переменным первой фунции уже доступа не имеет. Array.prototype.sortOnNum = function(param)
{
var sortOn_function = function(a,b)
{
trace(param)
a = Number(a[param]);
b = Number(b[param]);
return (a<b)*-1||(a>b)*1||0;
}
this.sort(sortOn_function);
}
test = [{x:600, y:20}, {x:500, y:20}, {x:0, y:20}, {x:300, y:20}, {x:100, y:20}, {x:400, y:20}, {x:200, y:20}];
test.sortOnNum()
Array.prototype.sortOnNum = function(p )
{
var param = p;
var sortOn_function = function(a,b)
{
trace(param)
a = Number(a[param]);
b = Number(b[param]);
return (a<b)*-1||(a>b)*1||0;
}
this.sort(sortOn_function);
}
test = [{x:600, y:20}, {x:500, y:20}, {x:0, y:20}, {x:300, y:20}, {x:100, y:20}, {x:400, y:20}, {x:200, y:20}];
test.sortOnNum()
test = [{x:600, y:20}, {x:500, y:20}, {x:0, y:20}, {x:300, y:20}, {x:100, y:20}, {x:400, y:20}, {x:200, y:20}];
test.sortOnNum()
Нет все вполне логично, и параметры в теле функции можно хранить вполне. к тому же когда мы инициализируем фунцию, она создается "с чистого листа" как бы новый объект, и экземляров функции можно создать несколько, этакий конструктор..... кстати ты интересовался как то о использовании регистер класс без мувиков, увидел я такое, и понял для чего, могу показать, Последний раз редактировалось john; 25.04.2002 в 21:53. |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
Цитата:
насчет функции и параметров: в своей первой функции после указанных в моем предыдущем сообщении строчек трейс поставь ;)) когда пишем, например: function test(param1, param2) { var internal = {a:param1, b:param2}; return internal; } ничего не смущает, правда ? ну так с созданием функции _то же самое_ поправь меня, если я неправильно понял, но в твоем первом коде ты почему-то посчитал, что переменная 'param' в строках a = Number(a[param]); b = Number(b[param]); будет подставляться во время выполнения функции 'sortOn_function'... но это ведь не так ! :)) ее значение встанет внутрь квдратных скобок уже во время создания функции, а при вызове это будет все равно что непеременное имя поля :D Последний раз редактировалось Nox Noctis; 25.04.2002 в 22:09. |
|
|||||
|
МЕГАФЛЭШЕР
Регистрация: May 1999
Адрес: Россия, Москва
Сообщений: 1,181
|
да видит... ну фик с ним,
вообще для меня это нарушение логики, поидее функция должна иметь свое локальное пространство для переменных нечего использовать чужие, так для меня понятнее и надежнее, Array.prototype.sortOnNum = function(param)
{
var sortOn_function = function(a,b)
{
trace(arguments.callee.param)
var p = arguments.callee.param;
a = Number(a[p]);
b = Number(b[p]);
return (a<b)*-1||(a>b)*1||0;
}
sortOn_function.param = param;
this.sort(sortOn_function);
}
test = [{x:600, y:20}, {x:500, y:20}, {x:0, y:20}, {x:300, y:20}, {x:100, y:20}, {x:400, y:20}, {x:200, y:20}];
test.sortOnNum("x")
|
|
|||||
|
МЕГАФЛЭШЕР
Регистрация: May 1999
Адрес: Россия, Москва
Сообщений: 1,181
|
Цитата:
ну не знаю, помоему ты перемудрил, ![]() |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
ничего я не перемудрил... :))
ну, может сказал коряво - эт да :)) я имел в виду, что после создания функции выражением var sortOn_function = function(a,b) { ///////// } где внутри фигурных скобок используется идентификатор 'param', она будет иметь вид как будто мы написали просто: var sortOn_function = function (a, b) {
a = Number(a["........."]);
b = Number(b["........."]);
return (a<b)*-1 || (a>b)*1 || 0;
};
...ладно, с этим все понятно :) так что там с Обджект.регистерКлассом без клипов ? :)) Последний раз редактировалось Nox Noctis; 25.04.2002 в 22:21. |
|
|||||
|
МЕГАФЛЭШЕР
Регистрация: May 1999
Адрес: Россия, Москва
Сообщений: 1,181
|
вообще может быть и так.... не знаю,
если так то конечно здорово, но как можно это утверждать на сто процентов? то есть получается что я буду заводить функцию и вызов из нее будет происходить при ее инициализации, то есть например:
function foo () {
var a_foo = function () {
[root_trace(1)]
}
}
function root_trace (msg) {
trace(msg)
return "str"
}
foo();
тогда почему парам то статичный? и еще пример из той же оперы при создании объектa, присвоение значения при создании вполне оправдано.. |
|
|||||
|
МЕГАФЛЭШЕР
Регистрация: May 1999
Адрес: Россия, Москва
Сообщений: 1,181
|
да, закроем тему,
далее регистер класс, кодик с комментариями, регистрируются класс, идентификатора в библиотеки такого нет... // -----------------------------------------------------------------
// NetServiceProxyResponder
// This is the automatically-generated responder object that is used
// when a service is called and no responder object was given.
// -----------------------------------------------------------------
_global.NetServiceProxyResponder = function(service, methodName)
{
//trace("NetServiceProxyResponder(" + service + "," + methodName + ")");
this.service = service;
this.methodName = methodName;
}
// This function gets called whenever an onResult is received from the server
// as a result of a call that is being handled by our responder object.
NetServiceProxyResponder.prototype.onResult = function(result)
{
//trace("NetServiceProxyResponder.onResult(" + result + ")");
var client = this.service.client;
// tell the result object what service it came from, if it wants to know.
// (this call usually has no effect, except for NetServiceProxy and RecordSet).
result._setParentService(this.service);
var func = this.methodName + "_Result";
if (typeof(client[func]) == "function")
{
// there is an "xxx_Result" method supplied - call it.
client[func](result);
}
else if (typeof(client.onResult) == "function")
{
// there is an "onResult" method supplied - call it.
client.onResult(result);
}
else
{
// nobody to call. Dump something to the output window.
NetServices.trace("NetServices", "info", 1, func + " was received from server: " + result);
}
}
// This function gets called whenever an onStatus is received from the server
// as a result of a call that is being handled by our responder object.
NetServiceProxyResponder.prototype.onStatus = function(result)
{
//trace("NetServiceProxyResponder.onStatus(" + objectToString(result) + ")");
var client = this.service.client;
var func = this.methodName + "_Status";
if (typeof(client[func]) == "function")
{
// there is an "xxx_Status" method supplied - call it.
client[func](result);
}
else if (typeof(client.onStatus) == "function")
{
// there is an "onStatus" method supplied - call it.
client.onStatus(result);
}
else if (typeof(_root.onStatus) == "function")
{
// there is an "onStatus" method at the root level - call it.
_root.onStatus(result);
}
else if (typeof(_global.System.onStatus) == "function")
{
// there is an "onStatus" method at the global level - call it.
_global.System.onStatus(result);
}
else
{
// nobody to call. Dump something to the output window.
NetServices.trace("NetServices", "info", 2, func + " was received from server: " + result.class + " " + result.description);
}
}
// -----------------------------------------------------------------
// NetServiceProxy
// -----------------------------------------------------------------
// Ensure that NetServiceProxy objects received via AMF messages get
// correctly deserialized into actionscript objects.
Object.registerClass("NetServiceProxy", NetServiceProxy);
|
![]() |
Часовой пояс GMT +4, время: 02:41. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|