<script> function p () {var len = arguments.length; for (var i = 0; i <len; i ++) {document.write (аргументы [i]+"<br/>"); }} функция myClass (x, y) {this.x = x; this.y = y; this.show = function () {return this.x+this.y; }} var m1 = new myclass (1,2); var m2 = new myclass (3,4); p (m1.show (), m2.show ()); </script>Существующие проблемы
1. Поскольку все экземпляры копий объектов, определенных одним и тем же методом, эффективность (эффективность памяти и неэффективное выполнение) может быть решено с помощью прототипа наследования.
2. Невозможно получить доступ к контролю за значениями атрибутов (частные, публичные), можно решить с помощью закрытия
Объект операции, доступ к атрибутам, является не переменной, а ссылка на объект
Обработка чтения только целочисленные части числовых значений
Математика [это <0? 'Celling': 'floor'] (это);
Ассоциативный массив
В JS вы должны передавать объекты для реализации ассоциативных массивов
Основные операции выполняются путем ключей, установки элементов и удаления элементов.
<script> var map = {x: 3, y: 4}; p (map.x); удалить map.x; //truep(map.x); // не определяется, что результат доступа к несуществующим элементам не определен. Поскольку значение может быть установлено на неопределенное, невозможно судить, существует ли значение, сравнивая значение с неопределенным. Вы можете перечислить его по A = 'undefined'; p (a); // undefinedp (typeof map.x == a); // true </script>Как ассоциативный массив, вы должны обратить внимание на
<script> function myclass (x, y) {this.x = x; this.y = y;} myclass.prototype.z = 5; var obj = new myclass (1,2); for (var in obj) {p (key+":"+obj [key]); // атрибуты, унаследованные через прототип, будут перечислены} // x: 1 y: 2 z: 5delete obj.x; // truep (obj.x); //undefinedp(obj.z); // 5 // Атрибуты, унаследованные через прототип, не могут быть удалены удалить obj.z; //truep(obj.z);//5///when Использование объектов в качестве ассоциативного массива, обычно создаются литералы. Даже если представление использует пустой объект, буквальный для создания ассоциативного массива без элементов, атрибут прототипа P ('Tostring' в OBJ); // truevar obj1 = {}; p ('tostring' in obj1); // true // enumenp (obj1.length); // undefinedfor (var k in obj1) {p (obj1 [k]);} // Никакие элементы не перечислены. Это связано с перечисленным атрибутом .//truevar obj1 = {}; p ('tostring' in obj1); // true // enum enumeration p (obj1.length); // undefinedfor (var k in obj1) {p (obj1 [k]);} // Никакие элементы не перечислены. Это связано с перечисленным атрибутом .//truevar obj1 = {}; p ('tostring' in obj1); // true // Самоподобный атрибут var, унаследованный участием в Prototype map = {}; p (map.hasownproperty ('toString')); //falsemap='toString'ty=1;p(map.hasownproperty('toString ')); // карта trueDelete ['toString']; p (map.hasownproperty ('tostring')); // false </script>Атрибуты
Атрибуты объекта также имеют некоторые атрибуты
В следующей таблице приведены атрибуты, определенные в пятом издании Ecmascript, и значение атрибута определяется как атрибуты значения.
Таблица 1
Имя атрибута | значение |
Записывается | Значение атрибута можно переписать |
перечисляется | Может быть перечислен в |
настраивается | Вы можете изменить атрибуты и удалить атрибуты |
получать | Функция Getter, которая указывает значения свойств |
набор | Функция сеттера, которая может указать значения атрибутов |
Неизменные объекты
То есть объект, состояние которого не может быть изменено после генерации, а строковый объект является типичным иммутируемым объектом.
Гибкое использование неподвижных объектов может улучшить надежность программы, например, при передаче ее параметрам метода, существует метод для переписывания содержания объекта и т. Д.
Необываемые объекты могут быть реализованы в JS
1. Скрыть атрибут (статус скрыт) и не предоставляйте операции изменений (реализация закрытия)
2. Гибкое использование функций, предоставленных Ecmascript в пятом издании
3. Гибкое использование записи, настраиваемых атрибутов, сеттеров и геттеров
Функции, используемые для поддержки неизменных объектов в Ecmascript версии 5, показаны в следующей таблице
Название метода | Новые атрибуты | Атрибут удалить | Изменение значения атрибута | Метод подтверждения |
Предотвращение | х | о | о | Object.Isextensible |
тюлень | х | х | о | Object.issealed |
заморозить | х | х | х | Object.isfrozen |
Object.preventextensions Пример
<Script> var obj = {x: 2, y: 3}; object.preventextensions (obj); // не может добавить атрибут obj.z = 4; p (object.keys (obj)); // x, y // не может удалить атрибут obj.y; p (object.keys (obj)); // x // не может добавить значение атрибута obj.x = 20; p (obj.x); //20/object.seal Пример Устанавливает настраиваемый атрибут для false var obj = {x: 2, y: 3}; object.seal (obj); // не может добавить или удалить obj.z = 3; p (object.keys (obj)); // x, ydelete obj.x; //falsep(object.keys(obj)); ;//x,y//can изменить значение атрибута obj.x = 20; p (obj.x); // 20 // object.freez obj.z = 3; p (object.keys (obj)); // x, y // может изменить значение атрибута obj.x = 20; p (obj.x); // 20 </script>Нужно обратить внимание
1. Для трех вышеупомянутых методов его нельзя восстановить после изменения.
2. Если вы хотите сделать унаследованный метод в прототипе наследия без изменений, вам нужно отобразить его.