JavaScript中只读属性的定义是什么?这是什么意思?
What is the definition of a read-only property in JavaScript? What does it mean?
我对只读 属性 的含义有点困惑?我知道 classList
根据 MDN 的定义是只读的 属性 但这到底是什么意思?
一个只读的属性意味着它不能被覆盖或分配给。在非严格模式下,任何此类赋值都将默默地不执行任何操作。例如:
var obj = {};
Object.defineProperty(obj, 'property', {value: 123, writeable: false})
// Assign 456 to obj.property using the . syntax, but it's still 123
obj.property = 456;
console.log(obj.property);
// Assign 789 to obj.property using the [] syntax, but it's still 123
obj['property'] = 789;
console.log(obj['property']);
或者在严格的 mide 中使用 TypeError
出错:
'use strict';
var obj = {};
Object.defineProperty(obj, 'property', {value: 123, writeable: false})
// Assign 456 to obj.property in strict mode will result in a TypeError
obj.property = 456;
console.log(obj.property);
当 属性 是只读的时,属性 被认为是“不可写的”。无法重新分配。
例如,您无法更新元素的 classList
属性 或为其赋值,但您可以读取它。
供参考:
除了@Mureinik所说的之外,还有另一种方法可以使对象处于只读模式
它叫做 freeze
你可以像这个例子一样使用它
let myObj = {id: 45, title: 'title here'}
Object.freeze(myObj);
myObj.title = 'update title' // this wouldn't updates
console.log(myObj)
// incase if you want to rewrite this object after freezing it
// you need to re-assign all of its values like this
myObj = {id: myObj.id, title: 'Another title here'}
console.log(myObj)
您可以在 mdn 文档中阅读有关 Object.freeze() and the right way to update it 的内容
我对只读 属性 的含义有点困惑?我知道 classList
根据 MDN 的定义是只读的 属性 但这到底是什么意思?
一个只读的属性意味着它不能被覆盖或分配给。在非严格模式下,任何此类赋值都将默默地不执行任何操作。例如:
var obj = {};
Object.defineProperty(obj, 'property', {value: 123, writeable: false})
// Assign 456 to obj.property using the . syntax, but it's still 123
obj.property = 456;
console.log(obj.property);
// Assign 789 to obj.property using the [] syntax, but it's still 123
obj['property'] = 789;
console.log(obj['property']);
或者在严格的 mide 中使用 TypeError
出错:
'use strict';
var obj = {};
Object.defineProperty(obj, 'property', {value: 123, writeable: false})
// Assign 456 to obj.property in strict mode will result in a TypeError
obj.property = 456;
console.log(obj.property);
当 属性 是只读的时,属性 被认为是“不可写的”。无法重新分配。
例如,您无法更新元素的 classList
属性 或为其赋值,但您可以读取它。
供参考:
除了@Mureinik所说的之外,还有另一种方法可以使对象处于只读模式
它叫做 freeze
你可以像这个例子一样使用它
let myObj = {id: 45, title: 'title here'}
Object.freeze(myObj);
myObj.title = 'update title' // this wouldn't updates
console.log(myObj)
// incase if you want to rewrite this object after freezing it
// you need to re-assign all of its values like this
myObj = {id: myObj.id, title: 'Another title here'}
console.log(myObj)
您可以在 mdn 文档中阅读有关 Object.freeze() and the right way to update it 的内容