Программирование - это просто
Advertisement
Главная arrow C#, Delphi, VB, F#, Web и пр. arrow Web-программирование arrow Уроки Java Script arrow Web-программирование: "Java Script(JS): Сильные стороны JS. Продолжение".
18.07.2018 г.
Главное меню
Главная
Системный подход
Интернет магазин
Биржевые роботы
Программные продукты
Математика и информатика
1С:Предприятие
C#, Delphi, VB, F#, Web и пр.
Искусственный интеллект
Услуги
Ча. Во. (FAQ)
Платный раздел
Наука для чайников
Разное
Размышления
Карта сайта
Друзья сайта
Excel-это не сложно
Все о финансах
Web-программирование: "Java Script(JS): Сильные стороны JS. Продолжение". Печать E-mail
Автор megabax   
17.12.2017 г.
Урок 13. Управление шрифтами в CSS New Page 1

Web-программирование: "Java Script(JS): Сильные стороны JS. Продолжение".

 

Продолжаем изучать методику правильного программирования на JS. На прошлом уроке мы остановились на объектах. Продолжим изучать их.

Каждый объект связан с объектом прототипом, от которого он может наследовать свойства. При создании нового объекта можно выбрать объект,  который будет его прототипом. Механизм такого наследования в JavaScript реализован довольно геморойно, но его можно значительно упростить. Для этого нужно реализовать метод create у функции Object:

 

                if(typeof(Object.create)!=='function')

                {

                    Object.create=function(obj)

                    {

                        var F=function() {};

                        F.prototype=o;

                        return new F;

                    }

                }

 

Данная функция будет создавать копию объекта, и изменение полей копии никак не скажется на полях объекта прототипа. Давайте проверим это на примере:

 

<html>

    <head>

        <meta charset="UTF-8">

        <title>Урок 124. Java Script (JS): Прототипы объектов</title>

        <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">

            function test() {

                var test_object={

                    name:"Александр",

                    passport: {

                        ser:123,

                        number:123456

                    },

                    age:41};

               

                if(typeof(Object.create)!=='function')

                {

                    Object.create=function(obj)

                    {

                        var F=function() {};

                        F.prototype=o;

                        return new F;

                    }

                }

               

                var test_object1=Object.create(test_object);

                test_object1.name="Иван";

                alert(test_object.name+" "+test_object.age+" "+test_object.passport.ser);

                alert(test_object1.name+" "+test_object1.age+" "+test_object1.passport.ser);

            }

        </SCRIPT>

    </head>

    <body>

        <form name="myform" method="GET">

            <input type="submit" value="OK" name="ok" ONCLICK="return test()">

        </form>

    </body>

</html>

 

Что характерно, добавляя к прототипу новое поле, мы добавляем его ко всем объектам, созданным на базе этого протитипа. Рассмотримпример:

<html>

    <head>

        <meta charset="UTF-8">

        <title>Урок 124. Java Script (JS): Прототипы объектов</title>

        <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">

            function test() {

                var test_object={

                    name:"Александр",

                    passport: {

                        ser:123,

                        number:123456

                    },

                    age:41};

               

                if(typeof(Object.create)!=='function')

                {

                    Object.create=function(obj)

                    {

                        var F=function() {};

                        F.prototype=o;

                        return new F;

                    }

                }

               

                var test_object1=Object.create(test_object);

                test_object.new_property="123";

                alert(test_object.new_property+" "+test_object1.new_property);

            }

        </SCRIPT>

    </head>

    <body>

        <form name="myform" method="GET">

            <input type="submit" value="OK" name="ok" ONCLICK="return test()">

        </form>

    </body>

</html>

 

Результатом его работы будет два раза по 123:

Web-программирование: "Java Script(JS): Сильные стороны JS. Продолжение".

 

Но, тем не менее, поля объектов, созданных на основе прототипа, меняются независимо:

 

                test_object.new_property="123";

                test_object1.new_property="22222";

 

Web-программирование: "Java Script(JS): Сильные стороны JS. Продолжение".

 

Создание поля у копии не приводит к созданию поля у прототипа:

                test_object1.new_property="ццццц";

 

Web-программирование: "Java Script(JS): Сильные стороны JS. Продолжение".

 

Таким образом, у объектов могут существовать свои независимые от прототипа поля. Если мы попытаемся обратиться к полю, которого нет у объекта, он будет искать их у прототипа. Если не нашел и у него - то у прототипа прототипа и так далее.

Как проверить наличие свойства? Можно воспользоваться функцией typeof, для несуществующего свойства он вернет undefined. Другой способ проверить - это использовать hasOwnProperty, но только в том случае, когда вам необходимо проверить собственное свойство объектов, так как эта функция не учитывает свойства, наследуемые от прототипов.

Перебрать все поля объекта можно вот таким вот образом:

                for (name in test_object1)

                {

                    document.writeln(name+": "+test_object1[name]+"<br>");

                }

 

В выборку попадут как поля прототипа, так и самого объекта. Различить их можно методом hasOwnProperty. И имейте в виду, что порядок полей может быть произвольным (как попало).

 

 

 

Последнее обновление ( 17.12.2017 г. )
 

Добавить комментарий


Защитный код
Обновить

« След.   Пред. »
 
© 2018 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги
Мы принимаем
Банковские карты
Оплатите покупку в интернет-магазине банковскими картами VISA и Mastercard любого банка.
узнать больше
Электронный кошелек
Моментальная оплата покупок с помощью вашего электронного кошелька RBK Money.
узнать больше
Банковский платеж
Оплатите покупку в любом российском банке. Срок зачисления средств на счет - 3-5 рабочих дней.
узнать больше
Денежные переводы
Оплата покупок через крупнейшие системы денежных переводов CONTACT и Unistream.
узнать больше
Почтовые переводы
Оплатите покупку в любом отделении Почты России. Срок зачисления платежа - 3-4 рабочих дня.
узнать больше
Платежные терминалы
Оплата покупок в терминалах крупнейших платежных систем в любом городе России - быстро и без комиссии.
узнать больше