Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 09.12.2003, 10:55
Whatsername вне форума Посмотреть профиль Отправить личное сообщение для Whatsername Найти все сообщения от Whatsername
  № 1  
Whatsername

Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
По умолчанию что создает прототипы?

Код:
Love = function (){
};
Love.name="love";
trace (Love.prototype.constructor.name);
//Love.prototype made by Love
Цитата:
Оригинал написал Робин Дебройл

Даже если и прототип не содержит нужных данных, история на этом не заканчивается. Этот самый прототип, являясь полноправным объектом, уж будьте уверены, проверит прототип класса, который создал его - Object. Короче говоря, он проверит Object.prototype...

...Ладно, может вы не в курсе, но в самом деле прототипы создаются классом Object. Точно так же и экземпляры классов (ведь они тоже объекты) слышат в момент своего рождения от родителей: "Если что, посмотри в моем прототипе сынок". Вот так все прототипы и экземпляры в конечном итоге добираются до Object.prototype, если нигде не найдут нужного свойства.
Так что же создает прототипы, класс которому они принадлежат или класс Object?


Последний раз редактировалось dm_nev; 09.12.2003 в 10:57.
Старый 09.12.2003, 12:54
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 2  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
грубо говоря - любой объект создается классом Object

по умолчанию, почти все классы являются дочерними от Object...
а prototype твоего класса - это объект, содержащий то что нужно всем инстансам этого класса

то есть прототип - это всего лишь контейнер, из которого берутся общие свойства и методы... при этом сам этот контейнер создан классом Object

кстати -
есть такое понятие - бесконечная цепочка наследования :)
если сделать так, чтобы прототипом класса был объект этого же класса, и обратиться к любому его свойству - мы получим бесконечную цепочку, на 256 звене которой компилятор склеит ласты :)


Последний раз редактировалось Nox Noctis; 09.12.2003 в 12:58.
Старый 09.12.2003, 13:10
Whatsername вне форума Посмотреть профиль Отправить личное сообщение для Whatsername Найти все сообщения от Whatsername
  № 3  
Whatsername

Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
Цитата:
при этом сам этот контейнер создан классом Object
Nox Noctis, почему тогда constructor в моем коде обращается не к Object?
Ну вообще-то все понятно, может я мало подумал перед тем как задать этот вопрос... спасибо

Старый 09.12.2003, 16:41
Whatsername вне форума Посмотреть профиль Отправить личное сообщение для Whatsername Найти все сообщения от Whatsername
  № 4  
Whatsername

Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
Цитата:
а prototype твоего класса - это объект, содержащий то что нужно всем инстансам этого класса
Nox Noctis, а какому классу принадлежит этот прототип если говорить не грубо?

Старый 09.12.2003, 16:58
iLoveYou вне форума Посмотреть профиль Отправить личное сообщение для iLoveYou Найти все сообщения от iLoveYou
  № 5  
iLoveYou
wanted

Регистрация: Sep 2002
Сообщений: 1,737
Цитата:
Оригинал написал(а) dm_nev

Nox Noctis, почему тогда constructor в моем коде обращается не к Object?
дух Нокса через меня говорит, что Love.prototype.constructor есть ссылка на функцию конструктора данного класса.
пример:
Код:
Love = function (a){
	trace (a);
};
b=Love.prototype.constructor;
b.apply(null, ["constructor called"]);
а так как функции тоже могут иметь свойства то
Love.name="love";
trace (Love.prototype.constructor.name);
выдаст сам знаешь что
__________________
вот тебе, революционный единоличник! вот тебе кулачество! вот тебе Союзкиножурнал!

Старый 09.12.2003, 19:16
Whatsername вне форума Посмотреть профиль Отправить личное сообщение для Whatsername Найти все сообщения от Whatsername
  № 6  
Whatsername

Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
Угу, спасибо, Сергей, дог.прототип - это ссылка на дог.
Все верно?

Старый 09.12.2003, 21:19
llllllllll вне форума Посмотреть профиль Отправить личное сообщение для llllllllll Найти все сообщения от llllllllll
  № 7  
llllllllll

Регистрация: Feb 2001
Сообщений: 1,893
Прототипы уже не в моде

JScript7

http://msdn.microsoft.com/library/de...ownclasses.asp

JavaScript2

http://www.mozilla.org/js/language/es4/index.html
http://www.mozilla.org/js/language/j...e/classes.html

или к примеру

http://ru3.php.net/manual/ru/ref.classobj.php

Так, что давайте в другой раздел с ActionScript 2.0

Старый 10.12.2003, 10:43
Whatsername вне форума Посмотреть профиль Отправить личное сообщение для Whatsername Найти все сообщения от Whatsername
  № 8  
Whatsername

Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
Оу! Спасибо за ссылки llllllllll. Но все по порядку. Я, пожалуй, суперАнтиМодный, но хочу разобраться как работают прототипы.

Старый 10.12.2003, 12:48
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 9  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
все можно наглядно увидеть прямо в листе переменных...
воспользуемся всем уже известной фишкой:
Код:
deprotect = function (o) {
	ASSetPropFlags(o, null, 8, 7);
	if (typeof (o) == "function") {
		ASSetPropFlags(o.prototype, null, 8, 7);
	} else {
		ASSetPropFlags(o.__proto__, null, 8, 7);
	}
};
теперь пишем:
Код:
//
cavat = function () {
};
cavat.prototype.test = "property of cavat class !";
//
gutta = new cavat();
//
deprotect(Object);
deprotect(gutta);
//
trace(cavat.prototype.__proto__ == Object.prototype);
trace(cavat.__proto__.__proto__ == Object.prototype);
запускаем, жмем Ctrl+Alt+V, и видим:
Код:
Variable _level0.cavat = [function] {
    prototype:[object #3, class 'Object'] {
      constructor:[function],
      __proto__:[object #4] {
        constructor:[function 'Object'] {
          prototype:[object #4]
        },
        watch:[function],
        unwatch:[function],
        addProperty:[function],
        valueOf:[function],
        toString:[function],
        hasOwnProperty:[function],
        isPrototypeOf:[function],
        isPropertyEnumerable:[function],
        toLocaleString:[function 'toLocaleString']
      },
      test:"property of cavat class !"
    }
  }
Variable _level0.gutta = [object #15] {
    __proto__:[object #3, class 'Object'],
    constructor:[function],
    __constructor__:[function]
  }
ну вооот... :)

в общем виде наследование можно организовывать так:
Код:
cls1 = function () {
}
cls2 = function () {
}
cls2.prototype = new cls1()

Старый 10.12.2003, 14:04
ultraflasher вне форума Посмотреть профиль Найти все сообщения от ultraflasher
  № 10  
ultraflasher
Banned

Регистрация: Nov 2003
Сообщений: 425
Цитата:
Оригинал написал(а) Nox Noctis
а prototype твоего класса - это объект, содержащий то что нужно всем инстансам этого класса
а prototype твоего объекта - это методы, содержащие то что нужно всем инстансам этого объекта (и всем его экземплярам)

если не ощибаюсь...


Последний раз редактировалось ultraflasher; 10.12.2003 в 14:06.
Создать новую тему   Часовой пояс GMT +4, время: 18:55.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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