理解javascript的对象

对象的定义:”无序属性的结合,其属性可以包含基本值,对象或者函数”

创建一个自定义对象最简单的方式

创建一个object实例

1
2
3
4
5
6
7
let person = new Object();
person.name = "LUO FANGGUO";
person.name = 29;
person.job = "frontent engineer";
person.sayName = function(){
alert(this.name);
}

也可以使用对象字面量来创建自定义对象

1
2
3
4
5
6
7
8
let person = {
name: "",
age: 29
job: "frontent engineer"
sayName: function(){
alert(this.name);
}
}

对象的属性类型

要修改属性的默认的特性,必须使用ES5提供的Object.defineProperty()方法。这个方法接收三个参数:属性所在的对象,属性的名字和一个描述符对象。

  1. 数据属性
    • [[Configurable]]:表示能否通过delete删除属性而从新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。默认值为true
    • [[Enumerable]]:表示能否通过for-in循环返回属性。默认值为true
    • [[Writable]]:表示能否修改属性的值。默认值为true
    • [[Value]]:包含这个属性的数据值。默认值为undefined

      值得注意的是:可以多次调用Object.defineProperty()方法修改同一属性,但是把Configurable设置为false之后就会有限制了。
  2. 访问器属性

    访问器属性不能直接定义,必须使用Object.defineProperty()来定义
    • [[Configurable]]:表示能否通过delete删除属性而从新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性。这个属性默认值为true
    • [[Enumerable]]:表示能否通过for-in循环返回属性。默认值为true
    • [[Get]]:在读取属性时调用的函数。默认值为undefined
    • [[Set]]:在写入属性时调用的函数。默认值为undefined

定义多个属性

在ES5可以使用Object.defineProperties()方法来定义多个属性

读取属性的特性

使用ES的Object.getOwnPropertyDescriptor()方法,可以取得给定属性的描述符。这个方法接收两个参数:属性所在对象和要读取其描述符的属性名称。