Просмотр полной версии : Экземпляр класса
funkyDevil
19.01.2007, 14:08
Для объявления класса по идее надо использовать следующуюю конструкцию:
var mySomeThing:MyClass = new MyClass();
Но также работает и такая вот строчка:
var mySomeThing:Object = new MyClass();
Не возникнут ли какие-нибудь проблемы, если я буду использовать второй вариант?
у меня не возникало даже если
var a=new MyClass();
CorC, потом возникнут :)
funkyDevil, ты не сможешь в таком случае использовать методы MyClass. Компилятор выдаст ошибку, что у объекта типа Object нет метода.
да, а в чем возникнут? просто я так думаю тип резиновый и все...
Тип никакой, методов и свойств у переменной неизвестного типа нет. Во всяком случае ты не говоришь об этом компилятору, что они есть.
Насколько мне известно, тип Object присваивается объекту у которого не известный тип.
ну я не говорю что их нет, но говорю зато потом какие они есть, и вызываю их, но левых никакий не вызываю, что нить помешает этому?
Мешает отладке в дальнейшем.
var mySomeThing:Object = new MyClass();
не имеет смысла. Это то же самое что var mySomeThing = new MyClass();Проблем не будет, пока в коде нет ошибок.
upd: CorC, спасибо поправил.
что то одно и то же написано
Имелось ввиду без типизации. Без типизации, кстати, ещё хуже, чем с такой.
но зато присваивание хуже будет проходить, если тип не будет в точности равен установленному,
хотя это и правильно, но что то я уже привык из числа строку получать...
надо бы отвыкать :)
Имелось ввиду без типизации. Без типизации, кстати, ещё хуже, чем с такой.
Чем лучше-то? Что оно будет проверять?
var mySomeThing:Object = 1;
mySomeThing = function(){};
mySomeThing = "";
Ты имеешь права так делать только в AS1.
Проверять, оно, конечно ничего не будет, т.к. всё — наследники Object.
Ты имеешь права так делать только в AS1.
Проверять, оно, конечно ничего не будет, т.к. всё — наследники Object.
Я так не пишу, я просто смоделировал "боевую ситуацию".
Вопрос остался - если проверять не будет, чем лучше?
Наличием знания у автора, что есть такая штука, как типизация.
Думаю, это лучше тем, что осознанно создавая такой объект(осознанно это подписывая к нему тип 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.
Тип Object присваивается для указания того, что это данные не простого типа (Number, String, Boolean), а всё-таки объект с заданными свойствами. Если не указывать вообще, то хрен его знает, что это такое, объект, число, строка, булево значение или ещё что-нибудь.
Это придирки.
Если у меня есть проблеммный объект, я его помечаю примерно так
////////!!!!!!!!!!!!!!!!!!///////////
так по-моему проще заметить, а набрав в поиске !!! найти
Но я понимаю вашу позицию.
Тип Object присваивается для указания того, что это данные не простого типа (Number, String, Boolean), а всё-таки объект с заданными свойствами. Если не указывать вообще, то хрен его знает, что это такое, объект, число, строка, булево значение или ещё что-нибудь.
Как раз присваивая тип Object мы и говорим что это хрен знает что такое.
Так что можно не позорится и не присваивать ничего вообще.
На скорость не влияет, на обработку ошибок тоже.
Как раз присваивая тип Object мы и говорим что это хрен знает что такое.
Объект — данные не простого типа. Даже если опираться на то, что все от него наследуется, это имеет другой смысл. Если же подразумевать под числами и строками объекты, то да — пофиг. Но тогда, как я уже говорил, разработчик не в теме. Считать объектом простые типы можно, но не стоит.
var myObj:Object;
trace(myObj.nextFrame);
var fake;
trace( fake.nextFrame );
trace (fake.nextFrame === myObj.nextFrame);
И вы все еще утверждаете что это одно и то же?
Считать объектом простые типы можно, но не стоит.
особенно это чревато последстиями при отладке чего нить
Если мы пишем код и используем типизацию, то мы прописываем тип для всех объектов. Если у нас появляются объекты без указания типа, то значит мы непоследовательны. Либо мы сами не знаем тип объекта, что говорит о наших неполных знаниях AS.
var myObj:Object;
trace(myObj.nextFrame);
var fake;
trace( fake.nextFrame );
trace (fake.nextFrame === myObj.nextFrame);
И вы все еще утверждаете что это одно и то же?
Смотрите пост 17. Я ж написал - для самоконтроля.
Kikasso, с точки зрения компилятора без разницы. Речь идёт о том, какой смысл закладывается в указание Object. Для меня это значит, что объект не может быть простого типа. А если нифига не указано, то ждать можно чего угодно. В AS1 пожалуйста, пишите так.
Я не говорю о вопросах знания, незнания и подсознания, последовательности и непоследовательности.
Указывать тип Object все равно что не указывать ничего.
Да оп чем мы тут спорим?
pkfun, я видел, свой метод показал постом ниже.
Либо мы сами не знаем тип объекта, что говорит о наших неполных знаниях AS.
не всегда, иногда нам просто нужен резиновый тип
Ну, а кто говорил, что это разные вещи? Я говорил, что это хуже для разработчика, вот и всё. Компилятору все-равно.
CorC, у меня никогда такого не было, что нужен «резиновый» тип.
ну тогда зачем такое во флеше предусмотрено?
по-моему это как раз не зря, именно для, не то что бы
неопытных прогаммеров, просто для ленивых
иногда проче просто заявить переменную без типа
+ ускоряется написание скриптов
Ну, а кто говорил, что это разные вещи? Я говорил, что это хуже для разработчика, вот и всё. Компилятору все-равно.
Если одно хуже другого, то это подразумевает наличие различия.
Ладно, мир дружба африка жевачка :drinks:
ну тогда зачем такое во флеше предусмотрено?
По историческим причинам. AS ведет свою историю от JavaScript, где строгая типизация вела бы к раздуванию документа html.
В AS2/AS1 это не имеет различий для компилятора (потому как AS2 не существует, а в AS1 нет типизации в принципе). В AS3 имеет. Потому как там правильное интерпретирование типа указанного типа Object.
AS ведет свою историю от JavaScript, где строгая типизация вела бы к раздуванию документа html.
Даа? А я думал, AS сделан по стандарту ECMAScript, он же ECMA 262 edition 3 (4 для AS3)… Впрочем, JavaScript был первым по стандарту ECMAScript, но типизация тут точно непричем.
JavaScript был первым по стандарту ECMAScript, но типизация тут точно непричем.
блин просто для справки дайте плиз линк, или расфишруйте,
просто ужасть как интересно стало, про ECMAS
http://en.wikipedia.org/wiki/ECMAScript
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.