在《JavaScript高级程序设计(第三版)》140页中,作者写到:
在调用Object.defineProperty()方法时,如果不指定,configurable、enumerable 和 writable 特性的默认值都是false。
这里的默认值为false,指的是通过defineProperty添加一个对象属性时的情形,比如:
var person = {};
Object.defineProperty(person, "name", {
value : "FM",
});
var descriptor = Object.getOwnPropertyDescriptor(person, "name");
alert(descriptor.value); //FM
alert(descriptor.configurable); //false
alert(descriptor.enumerable); //false
alert(descriptor.writable); //false
此时,person的name属性的configurable、enumerable和writable特性的值都是false。
但是,通过Object实例或字面量形式添加的属性,上述三个特性为ture:
var person = new Object();
person.name = "FM";
//或
//var person = {name : "FM"};
var descriptor = Object.getOwnPropertyDescriptor(person, "name");
alert(descriptor.value); //FM
alert(descriptor.configurable); //true
alert(descriptor.enumerable); //true
alert(descriptor.writable); //true
此时,通过defineProperty()修改person的name属性的特性,对于没有指定的特性,其值保持不变。
Object.defineProperty(person, "name", {
value : "MF",
writable : false
});
var descriptor = Object.getOwnPropertyDescriptor(person, "name");
alert(descriptor.value); //MF
alert(descriptor.configurable); //true
alert(descriptor.enumerable); //true
alert(descriptor.writable); //false