Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Action script 2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=49)
-   -   Private в классах (http://www.flasher.ru/forum/showthread.php?t=64876)

Varan_LSD 15.11.2004 13:06

Private в классах
 
Возникает такая ситуация - создаеться два объекта одного класса, приизменении Private параметров одного объекта изменяються эти же параметры и второго объекта. Почему? И как сделать что бы эти Объекты были полностью независимы?

MX500 15.11.2004 16:54

Скажу следующие!
 
Что значит при изменении private параметров!? У обьектов ты их изменить не можеш так как они тебе не доступны а доступны только внутри класса....


ЕстЁбственно если ты поменяеш эту переменную в нутри класса то у всех обьектов которые наследуються от етого класса ета переменная измениться.....


Независимы они и так друг от друга просто переменные которые ты хочеш поменять во время проигрывания флашки должны быть по крайней мере public

Varan_LSD 15.11.2004 17:06

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 принимает значение которое передаеться в конструктор каждому объекту, а массивы принимают значения которые передаються в конструктор последнему создаваемому объекту!

_zhloba 15.11.2004 17:40

Проблема не в свойствах класса.

В конструкторе класса ты передаешь один и то же массив всем экземплярам.

Заметь, что все экземпляры 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);

Так будет работать - em1 и em2 будут иметь разные значения в своих свойствах.

По значению передаются только Boolean, Number и String, все остальное - по ссылке

Varan_LSD 15.11.2004 20:11

Большое спасибо. А то столько литературы переколбасил, ничего нигде не написанно.


Часовой пояс GMT +4, время: 02:32.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.