Skip to content

javascript 高级程序设计 6-10 #8

Description

@ycshill
  • 理解对象-属性类型
  • 数据属性
    • 定义:普通定义;
    • 特性:
      • configurable: 1. 是否通过 delete 可以删除 2. 是否可以改为访问其属性 3. 是否可以修改属性特性;
      • enumerable: 同下
      • writable: 是否可以修改属性的值;
      • value: 这个属性的值;
  • 访问器属性
    • 定义:必须使用 Object.defineProperty(对象,属性名,特性组成的对象)
    • 常见的使用方式: 设置一个属性的值,会导致其他属性的变化
    • 特性
      • configurable : 1.是否能通过 delete 删除;2.是否能修改特性;3.是否能把属性修改为数据属性;
      • enumerable: 是否能通过for-in循环返回属性;
      • set: 写入属性时候调用, 默认值为undefined如果定义的时候没有写,则不能写入
      • get:读取的时候调用,默认为undefined, 定义时没有,不能独缺
  • 例子
var person = {
  name: 'lily';  // 数据属性
  _weight: 50;
}

// height就是访问器属性
Object.defineProperty(person, 'height', {
get: function() {
  return 168;
},
set: function(newVal) {
  newVal > 180 ? this._weight = 60 : 50;
}
})
  • 三个方法

    • Object.defineProperty(对象,属性名, 特性组成对象) 可以 1. 修改数据属性特性; 2.可以定义访问器属性;
    • Object.defineProperties(对象,属性的字面量对象) 可以同一时间,创建多个属性;
     Object.defineProperties(person, {
       name: {
          writable: true,
          value: 'lily',
       },
       height: {
         get: function() { return 168 }
       }
     })
    
    • 读取属性特性 Object.getOwnPropertyDescriptor(对象,属性名)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions