Свойство объекта в JavaScript имеет три свойства:
1. Написано. Это недвижимость?
2. Выключен. При использовании оператора FO/In, будет ли свойство перечислено?
3. Подобно. Могут ли свойства собственности быть изменены и можно ли удалить свойство.
В стандарте Ecmascript 3 значения вышеупомянутых трех свойств истины и не могут быть изменены: свойство вновь созданного объекта подлежит записи, перечисляемому и удаленному; объект свойства (дескриптор свойства) для настройки и изменения этих свойств.
Если информация о значении свойства также используется в качестве атрибута свойства, свойство в объекте обладает четырьмя свойствами: значение, записи, перечисляемое и настраиваемое.
Для свойств, определенных методами Getter и Setter, поскольку у них нет свойств для записи (свойство для записи, зависит от того, существует ли метод сеттера), это свойство также имеет четыре свойства: GET, SET, перечисляемое и настраиваемое - GET и SET Properties «функция».
Получите свойство объекта
В стандарте Ecmascript 5 информация о свойствах определенного свойства самого объекта может быть получена через Object.getOwnPropertyDescriptor ():
Кода -копия выглядит следующим образом:
var o = {x: 1};
var a = object.create (o);
ay = 3;
console.log (object.getownpropertydescriptor (a, "y")); // obj
console.log (object.getownpropertydescriptor (a, "x")); // не определен
Как вы можете видеть, если свойства не существует или свойство наследует от объекта прототипа, возвращается не определен.
Установите свойства свойства объекта
В стандарте Ecmascript 5 свойства определенного свойства самого объекта могут быть установлены через object.defineproperty ():
Кода -копия выглядит следующим образом:
Object.DefineProperty (a, "y", {
Значение: 3,
Записывается: правда,
перечисляется: ложь,
Конфигурация: true
});
console.log (a.propertyisenumerable ("y")); // false
Если свойство SET унаследовано от объекта Prototype, JavaScript создаст свойство с одним и тем же именем в самом объекте, что согласуется с соответствующим поведением операции назначения:
Кода -копия выглядит следующим образом:
Object.defineproperty (a, "x", {
значение: 1,
Записывается: правда,
перечисляется: ложь,
Конфигурация: true
});
console.log (a.propertyisenumerable ("x")); // false
console.log (o.propertyisenumerable ("x")); // true
В дополнение к изменению свойств свойства, вы также можете изменить свойство на доступ к Getter или Setter:
Кода -копия выглядит следующим образом:
Object.DefineProperty (a, "y", {
get: function () {return 42;}
});
Console.log (ay); // 42
При использовании object.defineproperty () значение свойства объекта свойства можно частично игнорировать.
Если свойство создано вновь, все игнорируемые значения свойств являются ложными или неопределенными.
Если собственность уже существует, все игнорируемые значения имущества остаются как есть.
Установить свойства свойства объекта в партиях
Если вам нужно установить свойства нескольких свойств одновременно, вы можете использовать оператор object.defineProperties (). Этот оператор возвращает модифицированный объект.
Кода -копия выглядит следующим образом:
Object.DefineProperties (a, {
"y": {value: 79, Записывается: true, перечисляется: true, настраивается: true},
"z": {value: 99, записываемость: true, перечислен: true, настраивается: true}
});
console.log (a); // Object {y = 79, z = 99}
Правила установки имущества имущества
При изменении свойств свойства необходимо соблюдать следующие правила. Если правила нарушены, JavaScript сообщит об ошибке TypeError:
Если объект не является расширяемым, вы можете только изменить свойства существующего свойства и не можете добавить новое свойство.
Если настраиваемое свойство свойства является ложным, значения настраиваемых и перечисленных свойств не могут быть изменены. Если свойство определяется Getter и Setter, методы Getter и Setter не могут быть изменены.
Если настраиваемое свойство и свойство, которое можно записать, являются ложными, значение свойства не может быть изменено. Если свойство с надписью на свойство является ложным, но его настраиваемое свойство верно, значение свойства все еще может быть изменено.