JavaScript中的Object.defineProperty()方法

在JavaScript中,defineProperty()defineProperties()这两个方法主要是用来定义或者修改对象的内部属性,看下面这段代码:

var person = {};
Object.defineProperty(person, "name", {
    value: "Make"
});
alert(person.name);//Make

定义多个属性:

var people = {};
Object.defineProperties(people, {
    one:{
        value: "Amy"
    },
    two:{
        value: "haki"
    },
    three:{
        value:"Coke"
    }
})
alert(people.one)//Amy
alert(people.two)//haki
alert(people.three)//Coke

了解他们的用法之后,我们再来看看下面数据属性的四个描述其行为的特性(ECMAScript中有两种属性:数据属性和访问器属性,其中数据属性包含一个数据值的位置
,在这个位置可以读取和写入值):

  • Configurable:能否通过delete删除属性;
  • Enumerable:表示能否通过for-in循环返回属性;
  • Writable:表示能否修改属性的数据值;
  • Value:指定这个属性的数据值,默认值为undefined

用Configurable举个例子,将configurable设为true:

var person = {};
Object.defineProperty(person, "name", {
    configurable: true,
    value: "Make"
});
alert(person.name);//Make
delete(person.name);
alert(person.name);//undefined

将configurable的值设为false:

var person = {};
Object.defineProperty(person, "name", {
    configurable: true,
    value: "Make"
});
alert(person.name);//Make
delete(person.name);
alert(person.name);//Make

我们再来看看writable,先将其设为true:

var person = {};
Object.defineProperty(person, "name", {
    writable: true,
    value: "Make"
});
alert(person.name);//Make
person.name = "Haki";
alert(person.name);//Haki

好,再设为false:

var person = {};
Object.defineProperty(person, "name", {
    writable: false,
    value: "Make"
});
alert(person.name);//Make
person.name = "Haki";
alert(person.name);//Make

在使用defineProperty()方法创建一个属性时,如果不指定,configurable,enumerable,writable特性的默认值是false。

上一篇:组件实现双向数据绑定的原理


下一篇:getter和setter以及defineProperty的用法