PDA

Просмотр полной версии : Экземпляр класса


funkyDevil
19.01.2007, 14:08
Для объявления класса по идее надо использовать следующуюю конструкцию:
var mySomeThing:MyClass = new MyClass();

Но также работает и такая вот строчка:
var mySomeThing:Object = new MyClass();

Не возникнут ли какие-нибудь проблемы, если я буду использовать второй вариант?

CorC
20.01.2007, 11:54
у меня не возникало даже если

var a=new MyClass();

etc
20.01.2007, 14:03
CorC, потом возникнут :)
funkyDevil, ты не сможешь в таком случае использовать методы MyClass. Компилятор выдаст ошибку, что у объекта типа Object нет метода.

CorC
20.01.2007, 14:06
да, а в чем возникнут? просто я так думаю тип резиновый и все...

etc
20.01.2007, 14:20
Тип никакой, методов и свойств у переменной неизвестного типа нет. Во всяком случае ты не говоришь об этом компилятору, что они есть.

pkfun
20.01.2007, 14:27
Насколько мне известно, тип Object присваивается объекту у которого не известный тип.

CorC
20.01.2007, 14:30
ну я не говорю что их нет, но говорю зато потом какие они есть, и вызываю их, но левых никакий не вызываю, что нить помешает этому?

etc
20.01.2007, 14:31
Мешает отладке в дальнейшем.

Kikasso
20.01.2007, 14:49
var mySomeThing:Object = new MyClass();
не имеет смысла. Это то же самое что var mySomeThing = new MyClass();Проблем не будет, пока в коде нет ошибок.
upd: CorC, спасибо поправил.

CorC
20.01.2007, 15:12
что то одно и то же написано

etc
20.01.2007, 15:42
Имелось ввиду без типизации. Без типизации, кстати, ещё хуже, чем с такой.

CorC
20.01.2007, 15:52
но зато присваивание хуже будет проходить, если тип не будет в точности равен установленному,
хотя это и правильно, но что то я уже привык из числа строку получать...
надо бы отвыкать :)

Kikasso
20.01.2007, 16:06
Имелось ввиду без типизации. Без типизации, кстати, ещё хуже, чем с такой.
Чем лучше-то? Что оно будет проверять?
var mySomeThing:Object = 1;
mySomeThing = function(){};
mySomeThing = "";

etc
20.01.2007, 16:08
Ты имеешь права так делать только в AS1.

Проверять, оно, конечно ничего не будет, т.к. всё — наследники Object.

Kikasso
20.01.2007, 16:27
Ты имеешь права так делать только в AS1.
Проверять, оно, конечно ничего не будет, т.к. всё — наследники Object.
Я так не пишу, я просто смоделировал "боевую ситуацию".
Вопрос остался - если проверять не будет, чем лучше?

etc
20.01.2007, 16:35
Наличием знания у автора, что есть такая штука, как типизация.

pkfun
20.01.2007, 16:50
Думаю, это лучше тем, что осознанно создавая такой объект(осознанно это подписывая к нему тип Object), вы для себя уже помечаете, что, мол, есть проблемный объект, который может вызвать скрытый сбой( без сообщения компилятора). И если у вас программа ведет себя непонятно, то вероятнее всего вы сначала проверите именно этот объект.
Потому что, если мы используем типизацию, то такой код:
var myObj:Number
trace(myObj.nextFrame());
выдаст такую ошибку:
**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 2: There is no method with the name 'nextFrame'.
trace(myObj.nextFrame());
А такой:

var myObj:Object
trace(myObj.nextFrame());
просто напишет undefined.

etc
20.01.2007, 16:52
Тип Object присваивается для указания того, что это данные не простого типа (Number, String, Boolean), а всё-таки объект с заданными свойствами. Если не указывать вообще, то хрен его знает, что это такое, объект, число, строка, булево значение или ещё что-нибудь.

Kikasso
20.01.2007, 16:54
Это придирки.
Если у меня есть проблеммный объект, я его помечаю примерно так
////////!!!!!!!!!!!!!!!!!!///////////
так по-моему проще заметить, а набрав в поиске !!! найти
Но я понимаю вашу позицию.

Kikasso
20.01.2007, 16:58
Тип Object присваивается для указания того, что это данные не простого типа (Number, String, Boolean), а всё-таки объект с заданными свойствами. Если не указывать вообще, то хрен его знает, что это такое, объект, число, строка, булево значение или ещё что-нибудь.
Как раз присваивая тип Object мы и говорим что это хрен знает что такое.
Так что можно не позорится и не присваивать ничего вообще.
На скорость не влияет, на обработку ошибок тоже.

etc
20.01.2007, 17:00
Как раз присваивая тип Object мы и говорим что это хрен знает что такое.
Объект — данные не простого типа. Даже если опираться на то, что все от него наследуется, это имеет другой смысл. Если же подразумевать под числами и строками объекты, то да — пофиг. Но тогда, как я уже говорил, разработчик не в теме. Считать объектом простые типы можно, но не стоит.

Kikasso
20.01.2007, 17:06
var myObj:Object;
trace(myObj.nextFrame);
var fake;
trace( fake.nextFrame );
trace (fake.nextFrame === myObj.nextFrame);

И вы все еще утверждаете что это одно и то же?

CorC
20.01.2007, 17:07
Считать объектом простые типы можно, но не стоит.
особенно это чревато последстиями при отладке чего нить

pkfun
20.01.2007, 17:07
Если мы пишем код и используем типизацию, то мы прописываем тип для всех объектов. Если у нас появляются объекты без указания типа, то значит мы непоследовательны. Либо мы сами не знаем тип объекта, что говорит о наших неполных знаниях AS.

pkfun
20.01.2007, 17:11
var myObj:Object;
trace(myObj.nextFrame);
var fake;
trace( fake.nextFrame );
trace (fake.nextFrame === myObj.nextFrame);

И вы все еще утверждаете что это одно и то же?
Смотрите пост 17. Я ж написал - для самоконтроля.

etc
20.01.2007, 17:13
Kikasso, с точки зрения компилятора без разницы. Речь идёт о том, какой смысл закладывается в указание Object. Для меня это значит, что объект не может быть простого типа. А если нифига не указано, то ждать можно чего угодно. В AS1 пожалуйста, пишите так.

Kikasso
20.01.2007, 17:13
Я не говорю о вопросах знания, незнания и подсознания, последовательности и непоследовательности.
Указывать тип Object все равно что не указывать ничего.
Да оп чем мы тут спорим?
pkfun, я видел, свой метод показал постом ниже.

CorC
20.01.2007, 17:14
Либо мы сами не знаем тип объекта, что говорит о наших неполных знаниях AS.
не всегда, иногда нам просто нужен резиновый тип

etc
20.01.2007, 17:15
Ну, а кто говорил, что это разные вещи? Я говорил, что это хуже для разработчика, вот и всё. Компилятору все-равно.

CorC, у меня никогда такого не было, что нужен «резиновый» тип.

CorC
20.01.2007, 17:18
ну тогда зачем такое во флеше предусмотрено?
по-моему это как раз не зря, именно для, не то что бы
неопытных прогаммеров, просто для ленивых
иногда проче просто заявить переменную без типа
+ ускоряется написание скриптов

Kikasso
20.01.2007, 17:19
Ну, а кто говорил, что это разные вещи? Я говорил, что это хуже для разработчика, вот и всё. Компилятору все-равно.

Если одно хуже другого, то это подразумевает наличие различия.
Ладно, мир дружба африка жевачка :drinks:

Kikasso
20.01.2007, 17:21
ну тогда зачем такое во флеше предусмотрено?

По историческим причинам. AS ведет свою историю от JavaScript, где строгая типизация вела бы к раздуванию документа html.

etc
20.01.2007, 17:27
В AS2/AS1 это не имеет различий для компилятора (потому как AS2 не существует, а в AS1 нет типизации в принципе). В AS3 имеет. Потому как там правильное интерпретирование типа указанного типа Object.

etc
20.01.2007, 18:42
AS ведет свою историю от JavaScript, где строгая типизация вела бы к раздуванию документа html.
Даа? А я думал, AS сделан по стандарту ECMAScript, он же ECMA 262 edition 3 (4 для AS3)… Впрочем, JavaScript был первым по стандарту ECMAScript, но типизация тут точно непричем.

CorC
20.01.2007, 18:56
JavaScript был первым по стандарту ECMAScript, но типизация тут точно непричем.
блин просто для справки дайте плиз линк, или расфишруйте,
просто ужасть как интересно стало, про ECMAS

etc
20.01.2007, 19:04
http://en.wikipedia.org/wiki/ECMAScript