Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Разница между "obj['s']" = и "obj.s =" (http://www.flasher.ru/forum/showthread.php?t=159067)

Welcometo 26.06.2011 23:12

Разница между "obj['s']" = и "obj.s ="
 
Есть ли разница в том, как указывать свойства объектам (динамически).
Так
Код:

var worker:Object = {};
worker["age"] = 15;

или так
Код:

worker.age = 15;
А так же есть ли разница в том как инициализировать новую переменную типа Object: так - var o:Object = new Object() , или так - var o:Object = {}; ?

КорДум 26.06.2011 23:20

Разница только в скорости доступа-создания.

udaaff 26.06.2011 23:27

Цитата:

Есть ли разница в том, как указывать свойства объектам (динамически).
Первый вариант использую только там, где нельзя использовать второй.
Цитата:

А так же есть ли разница в том как инициализировать новую переменную типа Object: так - var o:Object = new Object() , или так - var o:Object = {}; ?
Рекомендуется второй вариант.

serogah 26.06.2011 23:29

Привет!
var o:Object = new Object() идентично var o:Object = {}. Скорость создания - одинаковая.
worker["age"] = 15 идентично worker.age = 15. Скорость доступа - одинаковая.
Только есть отличие: при помощи квадратных скобок можна формировать свойство на "лету". Например:
worker["age"+8] = 15, что эквивалентно worker.age8 = 15. Но если написать: worker.age+8 = 15 - будет ошибка

КорДум 26.06.2011 23:30

Цитата:

Первый вариант использую только там, где нельзя использовать второй.
Это ты, например, про
Код AS3:

private function setMyProp(prop:String, value:*):void {
    _obj[prop] = value;
}

?

Добавлено через 54 секунды
Цитата:

Скорость создания - одинаковая
Скорость доступа - одинаковая..
Неправда.

serogah 26.06.2011 23:34

Цитата:

Неправда.
Почему неправда? Я проверял.

Добавлено через 2 минуты
Код AS3:

import flash.utils.getTimer;
 
var time:uint=getTimer();
var obj:Object={};
trace(getTimer()-time) //0

Код AS3:

import flash.utils.getTimer;
 
var time:uint=getTimer();
var obj:Object=new Object();
trace(getTimer()-time) //0

В 1 и 2 варианте - результат "0"

Welcometo 26.06.2011 23:38

Спасибо за ответы.
serogah, привет)
worker["age"+8] = 15, что эквивалентно worker.age8 = 15.
Вот это очень интересная вещь) Не знал)Часто необходимо бывает динамически создавать объекты(неопределенное количество), и в таком случае для доступа к ним приходится пихать их в коллекцию, а оттуда их уже по индексу выдергивать. А тут, грубо говоря, можно будет динамически каждому объекту раздавать id:
Код:

for (i;i<n;i++){worker["age"+i]}
. А потом обращаться worker.age1, worker.age2 и тд

dimarik 26.06.2011 23:39

на миллионе итераций проверьте

КорДум 26.06.2011 23:40

Код AS3:

private function onTimer():void {
        var num:uint = 1000000;
        var time:int;
        var obj:Object;
 
        time = getTimer();
        var i:int;
        for (i = 0; i < num; i++) {
                obj = { };
        }
        trace(getTimer() - time);
 
        time = getTimer();
        for (i = 0; i < num; i++) {
                obj = new Object();
        }
        trace(getTimer() - time);
 
        var objProps:Object = { };
 
        time = getTimer();
        for (i = 0; i < num; i++) {
                objProps.myProp = 50;
        }
        trace(getTimer() - time);
 
        time = getTimer();
        for (i = 0; i < num; i++) {
                objProps["myProp"] = 50;
        }
        trace(getTimer() - time);
}

Потому что проверять нужно не на одном.
Трейсы выдали: 1000, 621, 242, 362 соответственно.

serogah 26.06.2011 23:43

Цитата:

на миллионе итераций проверьте
. Да, верно, скорости разные. Но разница все равно небольшая.


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

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