![]() |
|
||||||||||
|
|||||
|
Регистрация: Dec 2003
Адрес: Minsk
Сообщений: 34
|
Возникает такая ситуация - создаеться два объекта одного класса, приизменении Private параметров одного объекта изменяються эти же параметры и второго объекта. Почему? И как сделать что бы эти Объекты были полностью независимы?
|
|
|||||
|
Banned
Регистрация: Nov 2004
Адрес: Crimea, Kiev
Сообщений: 38
|
Что значит при изменении private параметров!? У обьектов ты их изменить не можеш так как они тебе не доступны а доступны только внутри класса....
ЕстЁбственно если ты поменяеш эту переменную в нутри класса то у всех обьектов которые наследуються от етого класса ета переменная измениться..... Независимы они и так друг от друга просто переменные которые ты хочеш поменять во время проигрывания флашки должны быть по крайней мере public |
|
|||||
|
Регистрация: Dec 2003
Адрес: Minsk
Сообщений: 34
|
class Object3D{
private var cor3d = new Array(); private var Parts = new Array(); private var consPath = new String(); private var dist; function Object3D( xyz, part, nameClip, path, depth){ for (var i = 0; i < xyz.length; i++){ var temp = { x:xyz[i][0], y:xyz[i][1], z:xyz[i][2] }; this.cor3d[i] = temp; delete temp; } for (var j = 0; j < part.length; j++){ var temp = new Array(); temp["point1"] = part[j][0]; temp["point2"] = part[j][1]; temp["point3"] = part[j][2]; this.Parts[j] = temp; delete temp; } this.dist = 1000; eval(path).createEmptyMovieClip(nameClip, depth); this.consPath = String(eval(path)[nameClip]._target); } Вот такой код и самое интерестное что this.consPath принимает значение которое передаеться в конструктор каждому объекту, а массивы принимают значения которые передаються в конструктор последнему создаваемому объекту! Последний раз редактировалось Varan_LSD; 15.11.2004 в 17:15. |
|
|||||
|
Регистрация: Apr 2004
Адрес: Минск
Сообщений: 176
|
Проблема не в свойствах класса.
В конструкторе класса ты передаешь один и то же массив всем экземплярам. Заметь, что все экземпляры Object, в том числе и Array, в любую функцию, в том числе и конструктор класса, передаются по ссылке, а не по значению. В результате каждый экземпляр твоего класса ссылается на один и то же массив. Массивы и др. объекты нужно копировать, если ты хочешь иметь их независимые копии в каждом экземпляре. some_array=new Array();
some_object=new Object();
class some_class{
private var _array:Array;
private var _object:Object;
function some_class(some_array, some_object){
var i=0;
var num=some_array(length);
_array=new Array();
for(i=0; i<num; i++){
_array.push(some_array[i]);
}
var prop;
_object=new Object();
for(prop in some_object){
_object[prop]=some_object[prop];
}
}
}
em1=new some_class(some_array, some_object);
em2=new some_class(some_array, some_object);
По значению передаются только Boolean, Number и String, все остальное - по ссылке
__________________
Юра |
|
|||||
|
Регистрация: Dec 2003
Адрес: Minsk
Сообщений: 34
|
Большое спасибо. А то столько литературы переколбасил, ничего нигде не написанно.
|
![]() |
Часовой пояс GMT +4, время: 17:34. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|