
17.09.2004, 20:17
|
|
|
.
модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
|
Цитата:
Оригинал написал(а) [subway]design
Насчет "массивов" это все, конечно, верно, но лично для меня в АС неудобна следующая "фишка":
В АС нет такой вещи, как указатель или оператор ссылки (в Си++ - &). И все присваивания по ссылке/по значению происходят автоматически. Как это реализуется:
obj={a:10};
objRef=obj;
objRef.a++;
trace(obj.a); // выдает 11.
Типичный пример автоматического присваивания адреса объекта, а не его содержимого другой переменной при прямом присваивании, даже, если переменная - объект того же класс. Это справедливо, хотя бывает неудобно при копировании массивов ("массив" - объект класса Array). Поэтому пригодиться такой код:
Array.prototype.copy=function(a)
{
this.splice(0);
for(i=0;i<a.length;i++)
{
this[i]=a[i];
}
};
Как пользоваться можно догадаться.
Отступление: в случае копирования объектов оператором присваивания пригодилась бы возможность перегрузки функций, которая повлекла бы за собой введение типов данных, что сделало бы АС неудобным для "легких" скриптов.
...
Хуже становится, когда надо передать ссылку на скаляр (строку или число), а они при присваивании/передачи в ф-цию копируются и передают значение. Это совсем хреново, так как иногда требуется строгая независимость объектов, но одни объекты должны передавать другим ссылки на свои элементы, причем имена этих эл-тов должны быть известны только содержащему их объекту. А если такой элемент - скаляр?
Такие дела.
|
взято отсюда
|