игра брюс 2048
Главная / Программирование / Flash MX для профессиональных программистов / Тест 8

Flash MX для профессиональных программистов - тест 8

Упражнение 1:
Номер 1

Какую строчку из приведенных ниже следует вставить в описанную далее функцию superCon

Object.prototype.superCon = function(){ // вот здесь надо вставить строку кода }

на место, указанное в комментарии, чтобы ее (функцию superCon) можно было вызывать вместо super() в конструкторе (для вызова конструктора базового класса)?


Ответ:

 (1) arguments.caller.prototype.constructor.apply(this, arguments); 

 (2) arguments.callee.prototype.constructor.apply(this, arguments); 

 (3) arguments.caller.prototype.__proto__.constructor.apply(this, arguments); 

 (4) arguments.callee.prototype.__proto__.constructor.apply(this, arguments); 


Номер 2

Рассмотрите следующий код

o = Object; _global.Object = Parent; Child = function () {}; _global.Object = o; delete o;

и определите, какие высказывания по его поводу являются справедливыми.


Ответ:

 (1) этот код обеспечивает то, что класс Child становится наследником класса Parent 

 (2) этот код обеспечивает наследование без лишнего вызова конструктора 

 (3) этот код обеспечивает корректный вызов базового конструктора через super() без специальной установки поля __constructor__ 


Номер 3

За счет чего следующий код

o = Object; _global.Object = Parent; Child = function () {}; _global.Object = o; delete o;

обеспечивает то, что класс Child становится наследником класса Parent?


Ответ:

 (1) за счет того, что в prototype создается объект, того класса, который записан в _global.Object 

 (2) за счет того, что теперь все классы стали наследниками Parent 

 (3) за счет того, что в этом случае не работает стандартный механизм наследования с использованием __proto__ 


Упражнение 2:
Номер 1

Для каких целей может служить код такого вида:

func = function(someArgsArray){ // Количество аргументов в данном случае выбрано произвольно super(someArgsArray[0], someArgsArray[1]); } class_x = function(argClass, otherArgsArray){ this.__proto__.__constructor__ = argClass; func.apply(this, [otherArgsArray]); }

Ответ:

 (1) для вызова конструктора любого базового класса через apply 

 (2) для вызова через apply конструктора любого базового класса, кроме системных 

 (3) этот код некорректен и выполняться не будет 


Номер 2
Для реализации виртуальных базовых классов в функции multipleInherit используется

Ответ:

 (1) указание виртуальных базовых классов как специальных аргументов 

 (2) указание виртуальных базовых классов как обычных базовых плюс указание их же в качестве стоп-классов для ряда других базовых классов 

 (3) двойное указание класса в качестве базового, что автоматически интерпретируется как команда создать виртуальный базовый класс 


Номер 3
В нашей реализации множественного наследования цепочки __proto__  базовых классов выстраиваются 

Ответ:

 (1) параллельно (после копирования) 

 (2) параллельно (без копирования) 

 (3) последовательно (после копирования) 

 (4) последовательно (без копирования) 

 (5) упраздняются, а все нужные поля копируются прямо в создаваемый класс 


Упражнение 3:
Номер 1
Какая техника не применяется в общеполезной отладочной утилите dumpObj?

Ответ:

 (1) "отцепление" цепочки __proto__ 

 (2) раскрытие скрытых полей при помощи недокументированной функции ASSetProtFlags 

 (3) копирование открытых полей во вспомогательный объект 

 (4) использование специальных отладочных полей в объектах, передаваемых в эту функцию 


Номер 2
Зачем в нашей реализации множественного наследования применяется динамическая замена ссылки __constructor__ в процессе работы конструктора?

Ответ:

 (1) для вызова конструкторов системных базовых классов через apply 

 (2) для корректного вызова базовых конструкторов после того, как конструктор субцепочки вызван через apply 

 (3) для запоминания информации о том, какой класс в субцепочке является следующим 


Номер 3
Почему в нашей реализации множественного наследования для корректного наследования от класса Array (или String) надо указывать его как системный базовый?

Ответ:

 (1) потому что системные классы невозможно корректно скопировать 

 (2) потому что конструктор Array (как и конструктор String) работает как функция преобразования типа, если вызвать его через apply 

 (3) потому что не копируются поля, в которых хранятся данные контейнера 


Упражнение 4:
Номер 1
В нашей реализации множественного наследования виртуальный базовый класс

Ответ:

 (1) повторяется дважды в цепочке __proto__ 

 (2) повторяется трижды в цепочке __proto__ 

 (3) к нему ведут две альтернативные цепочки __proto__ 

 (4) ставится в цепочке __proto__ позади всех классов, которые являются его наследниками 


Номер 2
Обрыв цепочки __proto__ перед стоп-классом используется

Ответ:

 (1) при наследовании с виртуальными базовыми классами от "множественного наследника" 

 (2) при любом наследовании с виртуальными базовыми классами 

 (3) при любом наследовании от "множественного наследника" 


Номер 3
Обрыв цепочки __proto__ после стоп-класса используется

Ответ:

 (1) при наследовании с виртуальными базовыми классами от "множественного наследника" 

 (2) при любом наследовании с виртуальными базовыми классами 

 (3) при любом наследовании от "множественного наследника" 


Упражнение 5:
Номер 1
Что такое стоп-классы?

Ответ:

 (1) это классы, после которых обрывается цепочка __proto__ 

 (2) это классы, перед которыми обрывается цепочка __proto__ 

 (3) верны оба указанных варианта 


Номер 2
Почему нужны дополнительные утилиты для наследования с виртуальными базовыми классами от "множественного наследника"?

Ответ:

 (1) этого требует наша реализация виртуальных базовых классов 

 (2) этого требует специфика виртуальных базовых классов 

 (3) они нужны, потому что в нашей реализации множественного наследования цепочки __proto__ копируются 


Номер 3
Что делают дополнительные утилиты для наследования с виртуальными базовыми классами от "множественного наследника"?

Ответ:

 (1) копируют цепочку __proto__, останавливаясь на тех классах, которые помечены как виртуальные 

 (2) распознают, является ли какой-то класс сделанной в процессе выполнения multipleInherit копией другого 

 (3) помогают сформировать корректные массивы аргументов для multipleInherit 




Главная / Программирование / Flash MX для профессиональных программистов / Тест 8