How Do I Make A Specific Property Of An Object Immutable In Javascript?
Solution 1:
If you already have a property in place, you can modify it's descriptor's writable
property to false
like that:
Object.defineProperty(person, 'firstName', {
writable: false,
configurable: false
});
configurable: false
should be specified to prevent future modifications of the firstName
property, e.g. changing writable
back to true
.
Read more here about property descriptors.
If you're defining a property that didn't exist before, then all descriptor properties are defaulted to false
and the only things you need to specify are value
and enumerable
:
Object.defineProperty(person, "firstName", {
value: "Krishna",
enumerable: true
});
Solution 2:
You have a couple of options, but probably the simplest is to make a read-only, non-configurable property:
let person = {
lastName: 'Jai',
age: 12
};
Object.defineProperty(person, "firstName", {
value: "Krishna",
enumerable: true
});
The flags writable
and configurable
both default to false
when, as above, you're defining a new property. (You don't have to make it enumerable, as far as that goes, but...)
Example:
let person = {
lastName: 'Jai',
age: 12
};
Object.defineProperty(person, "firstName", {
value: "Krishna",
enumerable: true
});
console.log("before: ", person.firstName);
person.firstName = "Mohinder";
console.log("after setting in loose mode:", person.firstName);
functionfoo() {
"use strict";
console.log("trying to set in strict mode:");
person.firstName = "Mohinder"; // Error
}
foo();
Or if you want to apply the change after the fact, you need to specify the flags:
let person = {
firstName: "Krishna",
lastName: 'Jai',
age: 12
};
Object.defineProperty(person, "firstName", {
writable: false,
configurable: false
});
Example:
let person = {
firstName: "Krishna",
lastName: 'Jai',
age: 12
};
Object.defineProperty(person, "firstName", {
writable: false,
configurable: false
});
console.log("before: ", person.firstName);
person.firstName = "Mohinder";
console.log("after setting in loose mode:", person.firstName);
functionfoo() {
"use strict";
console.log("trying to set in strict mode:");
person.firstName = "Mohinder"; // Error
}
foo();
Solution 3:
You could use a getter method and omit the setter.
let person = {
getfirstName() { return'Krishna'; },
lastName: 'Jai',
age: 12
};
person.firstName = 'Kumar';
console.log(person);
Post a Comment for "How Do I Make A Specific Property Of An Object Immutable In Javascript?"