JavaScript основан на объектах, и любой элемент можно рассматривать как объект. Однако типы и объекты разные. В этой статье, помимо обсуждения некоторых характеристик типов и объектов, что более важно, мы изучаем, как писать хорошие и повторно используемые типы. В конце концов, если JavaScript, популярный язык сценариев, можно хорошо инкапсулировать и сформировать огромную библиотеку типов, его будет очень полезно повторно использовать.
В Интернете много статей о прототипах, но я так и не понял суть идеи. Наконец, написав много примеров кода, я понял: прототип можно использовать только с типами.
Ниже приведены некоторые примеры типов и объектов. Прочитав примеры, вам, возможно, будет легче понять связь между типами и объектами.
| Пример кода | иллюстрировать | |
| 1 | Объект.прототип.Свойство = 1; Object.prototype.Method = функция (){ alert(1);}var obj = новый Object();alert(obj.Property);obj.Method(); | Вы можете использовать прототипы для типов, чтобы добавить к типу поведение. Такое поведение может проявляться только в экземплярах типа. В JS разрешены следующие типы: Array, Boolean, Date, Enumerator, Error, Function, Number, Object, RegExp, String. |
| 2 | вар объект = новый объект (); obj.prototype.Property = 1;//Ошибка//Errorobj.prototype.Method = function(){ alert(1);} | Вы не можете использовать прототип в экземпляре, иначе произойдет ошибка компиляции. |
| 3 | Object.Property = 1;Object.Method = function(){ alert(1);}alert(Object.Property);Object.Method(); | Вы можете определить «статические» свойства и методы для типа и вызывать их непосредственно в этом типе. |
| 4 | Object.Property = 1;Object.Method = function(){ alert(1);}var obj = new Object();alert(obj.Property);//Errorobj.Method();//Error | Экземпляр не может вызывать статические свойства или методы типа, в противном случае возникает неопределенная ошибка объекта. |
| 5 | функция Aclass(){this.Property = 1;this.Method = function(){ alert(1);}}var obj = new Aclass();alert(obj.Property);obj.Method(); | Этот пример демонстрирует обычный способ определения типа в JavaScript. |
| 6 | функция Aclass(){this.Property = 1;this.Method = function(){ alert(1);}}Aclass.prototype.Property2 = 2;Aclass.prototype.Method2 = function{ alert(2);}var obj = новый Aclass();alert(obj.Property2);obj.Method2(); | Прототипы можно использовать извне для добавления свойств и методов к пользовательским типам. |
| 7 | функция Aclass(){this.Property = 1;this.Method = function(){ alert(1);}}Aclass.prototype.Property = 2;Aclass.prototype.Method = function{ alert(2);}var obj = новый Aclass();alert(obj.Property);obj.Method(); | Свойства или методы пользовательского типа не могут быть изменены извне через прототип. Как видно из этого примера: вызываемые свойства и методы по-прежнему являются результатами первоначального определения. |
| 8 | function Aclass(){this.Property = 1;this.Method = function(){ alert(1);}}var obj = new Aclass();obj.Property = 2;obj.Method = function(){ alert( 2);}alert(obj.Property);obj.Method(); | Свойства объектов можно изменять. (Это точно) Вы также можете изменить методы объекта. (Отличается от общей объектно-ориентированной концепции) |
| 9 | function Aclass(){this.Property = 1;this.Method = function(){ alert(1);}}var obj = new Aclass();obj.Property2 = 2;obj.Method2 = function(){ alert( 2);}alert(obj.Property2);obj.Method2(); | Вы можете добавлять свойства или методы к объектам. |
| 10 | функция AClass() { this.Property = 1; this.Method = function() { alert(1); }} function AClass2() { this.Property2 = 2; this.Method2 = function() { alert(2); }}AClass2.prototype = новый AClass();var obj = новый AClass2();alert(obj.Property);obj.Method();alert(obj.Property2);obj.Method2(); | Этот пример иллюстрирует, как один тип наследуется от другого типа. |
| 11 | функция AClass() { this.Property = 1; this.Method = function() { alert(1); }} function AClass2() { this.Property2 = 2; this.Method2 = function() { alert(2); }}AClass2.prototype = новый AClass();AClass2.prototype.Property = 3;AClass2.prototype.Method = function(){ alert(4);}var obj = new AClass2();alert(obj.Property);obj.Method(); | Этот пример иллюстрирует, как подкласс может переопределить свойства или методы родительского класса. |
・Пример 2: Ограничения на использование прототипа
・Пример 3. Как определить статические члены типа
・Пример 7: ограничения прототипа для членов переопределенных типов.
・Пример 10: Как наследовать один тип от другого типа
・Пример 11: Как переопределить члены родительского класса в подклассе
Объектно-ориентированные функции, которые может реализовать JavaScript, включают:
・Общественное поле
・Открытый метод
・Частное поле
・Частный метод (частное поле)
・Перегрузка метода
·Конструктор
·Событие
・Единое наследование
・Подкласс переопределяет атрибуты или методы родительского класса (переопределить).
・Статические свойства или методы (статический элемент)