javascript 设置对象属性只读

javascript 设置对象属性只读


在设置对象属性只读之前,咱们先来了解一下对象的数据属性,所谓的数据属性就是包含一个数据值的位置。在这个位置可以读取和写入值。数据属性有 4 个描述其行为的特性。

  1. [[Configurable]]:表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。像前面例子中那样直接在对象上定义的属性,它们的这个特性默认值为 true。
  2. [[Enumerable]]:表示能否通过 for-in 循环返回属性。像前面例子中那样直接在对象上定义的属性,它们的这个特性默认值为 true。
  3. [[Writable]]:表示能否修改属性的值。像前面例子中那样直接在对象上定义的属性,它们的这个特性默认值为 true。
  4. [[Value]]:包含这个属性的数据值。读取属性值的时候,从这个位置读;写入属性值的时候,把新值保存在这个位置。这个特性的默认值为 undefined。

例一:

var person = {
	name: "Code Famer"
}

在例一中我们直接在对象上定义了属性,这时它们的[[Configurable]]、 [[Enumerable]]和[[Writable]]特性都被设置为 true,而[[Value]]特性被设置为指定的值,也就是“Code Famer”。

这里创建了一个名为 name 的属性,为它指定的值是"Code Famer"。也就是说, [[Value]]特性将被设置为"Code Famer",而对这个值的任何修改都将反映在这个位置。

进入正题,我们想要把name属性设置为只读该怎么做呢,这时要修改属性默认的特性,必须使用 ECMAScript 5 的 Object.defineProperty()方法。这个方法接收三个参数:属性所在的对象、属性的名字和一个描述符对象。其中,描述符(descriptor)对象的属性必须是: configurable、 enumerable、 writable 和 value。设置其中的一或多个值,可以修改对应的特性值。

例二:

var person = {
	name: "Code Famer" 
};
Object.defineProperty(person, "name", {
	writable: false, // 这里我们writable设置为false
	value: "Code Famer"
});
alert(person.name); //"Code Famer"
person.name = "Web Code Famer"; // 修改name属性的值为Web Code Famer
alert(person.name); //"Code Famer"

从例二中我们可以看到我们定义person对象的name属性为只读,值为Code Famer且不可修改,如果尝试为它指定新值,则在非严格模式下,赋值操作将被忽略;在严格模式下,赋值操作将会导致抛出错误。

你可能感兴趣的:(javascript 设置对象属性只读)