对象

无序属性的集合,其属性可以包含基本值、对象和函数

自定义对象

  • 创建Object实例,再添加属性和方法 ```javascript var person = new Object(); person.name = “fanison”; person.age = 18; person.job = “engineer”

person.sayName = function(){ console.log(this.name); }

  1. 创建person对象,添加属性(nameagejob)和方法(sayName())
  2. - 对象字面量语法
  3. ```javascript
  4. var person = {
  5. name: "fanison",
  6. age: 18,
  7. jon: "engineer",
  8. sayName: function(){
  9. console.log(this.name);
  10. }
  11. }

属性类型

Object.defineProperty()

接受三个参数: 属性所在的对象、属性的名字、描述符对象(数据属性)

  1. let obj = { a: 1}
  2. obj.b = 2
  3. obj['c'] = 3
  4. Object.defineProperty(obj,'d',{value: 4}) // 增加
  5. Object.defineProperty(obj,'a',{value: 5}) // 修改

数据属性

Configurable:能否通过 delete 删除属性从而重新定义属性
Enumerable: 能否通过for-in循环返回属性
Writable: 能否修改属性的值
Value: 包含这个属性的数据值,默认 undefined

  1. var person = {};
  2. Object.defineProperty(person,"name",{
  3. writable: false, // 属性不可修改
  4. configurable: false, // 不能从对象中删除属性
  5. value: "fansion"
  6. });
  7. console.log(person.name); // fanison
  8. person.name = "yafanison";
  9. console.log(person.name); // fanison
  10. delete person.name
  11. console.log(person.name); // fanison

调用 Object.defineProperty() 方法创建新属性时,如果不指定,configurable、enumerable、writable、value的默认值都是false。

访问器属性

Configurable:能否通过 delete 删除属性从而重新定义属性
Enumerable: 能否通过for-in循环返回属性
Get: 读取属性时调用的函数
Set: 写入数据时调用的函数

  1. var book = {
  2. _year: 2004,
  3. edition: 1
  4. }
  5. Object.defineProperty(book, "year", {
  6. get: function(){
  7. return this._year;
  8. },
  9. set: function(newValue){
  10. if(newValue > 2004){
  11. this._year = newValue;
  12. this.edition += newValue - 2004;
  13. }
  14. },
  15. value:2000
  16. });
  17. book.year = 2005;
  18. console.log(book.edition); // 2

创建book对象, 访问器属性 year 包含 getter函数和setter函数;getter函数返回_year的值,setter函数设置值。