Вы можете использовать defineProperty , для чего член вы хотите обезопасить.
Майк упомянул атрибут configurable
для предотвращения переопределения - удалить. Я тоже добавляю это.
function final(obj, members) {
for (var i = 0; i < members.length; i++) {
var m = members[i];
if (obj.hasOwnProperty(m)) {
Object.defineProperty(obj, m, {
value: obj[m],
writable: false,
configurable: false
});
}
}
return obj;
}
var obj = { foo: "bar" };
obj = final(obj, ["foo"]);
obj.foo = ""; // output will be empty but
obj.foo // now output's still bar.
Другой вариант
Object.freeze . Но он защищает всех членов объекта.
var obj = { foo: "bar" };
obj = Object.freeze(obj);
obj.foo = ""; // output is empty
obj.foo // output is still "bar".