Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
51 госы.docx
Скачиваний:
8
Добавлен:
01.05.2025
Размер:
75 Кб
Скачать
☆

13.1.2 Объединённые объекты

Когда два или более объектов Function объединяются, у них появляются следующие особенности:

  • Каждый раз, когда создаётся или устанавливается не-внутреннее свойство объекта O, соответствующее свойство немедленно создаётся или устанавливается в такое же значение у всех объектов, объединённых с O.

  • Каждый раз, когда удаляется не-внутреннее свойство объекта O, соответствующее свойство немедленно удаляется у всех объектов, объединённых с O.

  • Если объекты O и P объединены, для них операторы сравнения == и ===дают положительный результат.

  • Объединение транзитивно и симметрично, так что если объединить объектыO и P и объединить объекты P и Q, то объекты O и Q тоже автоматически окажутся объединёнными.

ЗАМЕЧАНИЕ Два или более объединённых объекта практически неразличимы, за исключением того, что они могут обладать различными внутренними свойствами. Данная спецификация определяет только одно внутреннее свойство, которое может различаться у таких объектов - [[Scope]].

Объединённые объекты используются в данном стандарте как средство для точного описания поведения языка. Не предполагается, что они будут использоваться в качестве образца для практической реализации объектов типа Function. Вместо этого рекомендуется, чтобы реализация самостоятельно определяла случаи, в которых различия в свойствах [[Scope]] у двух или более объединённых объектов типа Function незаметны извне, и повторно использовала в таких случаях один и тот же объект Function вместо создания набора объединённых объектов. Такая оптимизация является разрешённой, поскольку данный стандарт описывает лишь внешнее поведение программ на ECMAScript.

13.2 Создание объектов типа Function

Используя опциональный список аргументов, определённый Списком Формальных Аргументов, тело, определённое Телом Функции, и иерархию областей видимости, определённую ОбластьюВидимости, объект типа Function создаётся по следующей схеме:

1. Если уже существует объект E, который был создан предыдущим вызовом алгоритма данного раздела, и этому вызову было передано ТелоФункции, тождественное ТелуФункции, передаваемому сейчас, - переход на шаг 13. (Если существует более одного объекта E, удовлетворяющего этим критериям - конкретная реализация языка может выбрать любой по своему усмотрению.)

2. Создать новый встроенный объект ECMAScript, обозначив его как F.

3. Установить свойство [[Class]] объекта F в "Function".

4. Установить свойство [[Prototype]] объекта F стандартному прототипу объекта Function согласно описанию в разделе 15.3.3.1.

5. Установить свойство [[Call]] объекта F согласно описанию в разделе 13.2.1.

6. Установить свойство [[Construct]] объекта F согласно описанию в разделе13.2.2.

7. Установить свойство [[Scope]] объекта F равным новой иерархии областей видимости (раздел 10.1.4), содержащей те же объекты, что и ОбластьВидимости.

8. Установить свойство length объекта F равным количеству формальных свойств, указанных в СпискеФормальныхАргументов. Если аргументов указано не было, установить свойство length объекта F равным 0. Этому свойству назначаются атрибуты согласно описанию в разделе 15.3.5.1.

9. Создать новый объект, как он был бы создан выражением new Object().

10. Установить свойство constructor объекта Результат(9) равным F. Этому свойству назначаются атрибуты { DontEnum }.

11. Установить свойство prototype объекта F равным Результату(9). Этому свойству назначаются атрибуты согласно описанию в разделе 15.3.5.2.

12. Вернуть F.

13. Реализация по своему усмотрению может перейти либо на шаг 2, либо на шаг 14.

14. Создать новый встроенный объект ECMAScript, объединённый с E, обозначив его как F. Скопировать все не-внутренние свойства и их атрибуты объекта E в объект F, чтобы не-внутренние свойства объектов E и F были идентичны.

15. Установить свойство [[Class]] объекта F в "Function".

16. Установить свойство [[Prototype]] объекта F стандартному прототипу объекта Function согласно описанию в разделе 15.3.3.1.

17. Установить свойство [[Call]] объекта F согласно описанию в разделе 13.2.1.

18. Установить свойство [[Construct]] объекта F согласно описанию в разделе13.2.2.

19. Установить свойство [[Scope]] объекта F равным новой иерархии областей видимости (раздел 10.1.4), содержащей те же объекты, что и ОбластьВидимости.

20. Вернуть F.

ЗАМЕЧАНИЕ Свойство prototype автоматически создаётся для каждой функции с целью обеспечения возможности использования функции в качестве конструктора.

Шаг 1 позволяет реализации оптимизировать типичный случай функции A, имеющей вложенную независимую функцию B. В этом случае реализация может повторно использовать тот же объект для B, вместо того чтобы создавать каждый раз новый экземпляр при вызове A. Шаг 13 делает эту оптимизацию необязательной; реализация, которая предпочтёт не воспользоваться ей, перейдёт на шаг 2.

Например, для кода

function A() {

function B(x) {return x* x;}

return B;

}

function C() {

return eval("(function(x) {return x* x;})");

}

var b1 = A();

var b2 = A();

function b3(x) {return x* x;}

function b4(x) {return x* x;}

var b5 = C();

var b6 = C();

реализация может, но не обязана, объединить b1 и b2. Более того, она может использовать для b1 и b2 один и тот же объект, поскольку нет возможности различить их свойства [[Scope]]. С другой стороны, реализация не должна объединять b3 и b4, поскольку их исходные коды не тождественны (согласно13.1.1). Также реализация не должна объединять b5 и b6, потому что они созданы двумя разными вызовами eval и, таким образом, их исходные коды не тождественны.

На практике скорее всего окажется целесообразным объединять объекты типа Function только в тех случаях, когда реализация может доказать, что различия между их свойствами [[Scope]] не различимы, и в таких случаях можно повторно использовать один объект. Следуя этому принципу, реализация встретит только тривиальный случай объединения объекта с самим собой.

13.2.1 [[Call]]

Когда вызывается свойство [[Call]] объекта F типа Function, предпринимаются следующие шаги:

1. Создать новый контекст исполнения, используя СписокФормальныхАргументовобъекта F, переданный список значений аргументов и значение this согласно описанию в 10.2.3.

2. Вычислить значение ТелаФункции.

3. Выйти из контекста исполнения, созданного в шаге 1, восстановив предыдущий контекст исполнения.

4. Если Результат(2). тип равен throw - бросить Результат(2). значение.

5. Если Результат(2). тип равен return - вернуть Результат(2). значение.

6. (Результат(2). тип в данной точке должен равняться normal.) Вернутьundefined.

13.2.2 [[Construct]]

Когда вызывается свойство [[Construct]] объекта F типа Function, предпринимаются следующие шаги:

1. Создать новый встроенный объект ECMAScript.

2. Установить свойство [[Class]] объекта Результат(1) в "Object".

3. Получить значение свойства prototype объекта F.

4. Если Результат(3) является объектом, установить свойство [[Prototype]]Результата(1) равным Результату(3).

5. Если Результат(3) не является объектом, установить свойство [[Prototype]]Результата(1) равным стандартному прототипу объекта Object согласно описанию в разделе 15.2.3.1.

6. Вызвать свойство [[Call]] объекта F, указав Результат(1) в качестве значенияthis и передав список аргументов, переданный вызову [[Construct]], в качестве значений аргументов.

7. Если Тип(Результата(6)) - Object, вернуть Результат(6).

8. Вернуть Результат(1).

Методы формирования и внедрения корпоративной культуры   в деятельность компании (отечественный и зарубежный опыт) Миссию, ценности и правила корпоративной культуры нетрудно написать и оформить в качестве «Делового кодекса», но реализация, проявление и «живое» существование корпоративных установок за­висят от успешного решения непростой проблемы организации спе­циальных мероприятий по их внедрению [2, С. 63]. Опыт и наблюдение за дея­тельностью многих российских компаний показывают, что именно практический аспект существования корпоративной культуры явля­ется самым важным и самым трудоемким. Японский ис­следователь Т. Коно так описывает решение проблемы практического внедрения норм и правил корпоративной культуры на японских пред­приятиях: «Кредо компании повторяется повсеместно. Оно излагает­ся и подробно объясняется в брошюре, которая знакомит нового ра­ботника с компанией, ее историей, продукцией, организационной структурой и политикой каждого подразделения. Всесторонне позна­комив с компанией, от сотрудников ждут, что они станут вести себя наилучшим образом для достижения цели компании, будут выполнять свои обязанности по собственной инициативе, даже если нет подроб­ной должностной инструкции [4, С. 76]. На то, чтобы дать новым работникам техническую квалификацию, вдохновить их философией, целями и политикой компании, тратится около восьми месяцев. Каждое утро проводится утреннее собрание в каждом подразде­лении, исполняется гимн компании и хором зачитываются «Семь ду­хов», затем кто-то из служащих излагает перед собравшимися свое мнение о работе. Текст основных правил вывешен на стене, и лозунг текущего года поднят высоко для всеобщего обозрения. На Новый год ведущие менеджеры собираются вместе, и председа­тель совета директоров вместе с президентом компании объявляет им базовую политику на предстоящий год. Разрабатывается долгосроч­ный план, и информация о новых направлениях стратегии компании через журнал компании сообщается всем работникам» [3, С. 163]. В качестве примера в этом небольшом отрывке перечислены следую­щие методы внедрения корпоративной культуры, которые, кстати, используются не только в Японии, но и в Европе и США (кроме, пожалуй, пения корпоративных гимнов):        содержанием введения в должность вновь принимаемых сотруд­ников выступает не только их профессиональное обучение, но и использование корпоративных лозунгов и целей для вдохновления на работу;        целевое использование средств корпоративной прессы (изло­жение корпоративных ценностей и правил в брошюрах);        вывешивание текстов, в которых перечислены корпоративные лозунги, ценности и правила, на стендах компании;        регулярные выступления руководства с формулировками кор­поративных ценностей, целей и правил;        «накачка» персонала каждое утро перед работой – пение гим­нов, выступление ведущих сотрудников с формулировками целей работы;        регулярное повторение ценностей, целей и принципов корпо­ративной культуры для их глубокого усвоения работниками. В России тоже есть эффективный метод разработки и практического внедрения корпоративной культуры в компании, созданный и апробированный отечественными игротехниками. В 80-х – начале 90-х гг. этот метод называлсяорганизационно - деятелъностной игрой (ОДИ) и применялся для решения нестандартных народнохозяйственных про­блем, разработки крупных государственных проектов, перестройки системы управления предприятий и организаций [18, С. 67]. В последние годы в процессе применения этого метода с целью со­здания и внедрения корпоративной культуры в компании его можно назвать корпоративным тренингом. 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]