美文网首页
高级程序设计读书笔记(六)---对象

高级程序设计读书笔记(六)---对象

作者: 芗芗_ | 来源:发表于2018-10-25 17:11 被阅读0次

    简介:
    ECMA-262把对象定义为:“无序属性的集合,其属性可以包含基本值,对象或者函数”,每一个对象都是基于一个引用类型创建的 (俗称:ECMAScript一切皆对象)

    6.1 理解对象

    创建对象一般有两种方式:

    // 1 原生构造函数Object
    let person = new Object()
    
    // 2 对象字面量
    let person = {}
    
    6.1.1 属性类型

    ECMAScript定义:描述属性的各种特征 这些特性是为了实现javascript引擎用的,因此在javascript不能直接的访问他们
    ECMAScript中有两种属性:数据属性和访问器属性

    1.数据属性

    [[Configurable]]:表示是否能通过delete杉树属性而从新定义属性,是否能修改属性的特性,是否能把属性修改为访问器属性,直接在对象上定义的属性 ,这个特性默认为true
    [[Enumerable]]:表示能付通过for-in 循环返回属性,直接在对象上定义的属性 ,这个特性默认为true
    [[Writable]]: 表示能否修改属性的值,直接在对象上定义的属性 ,这个特性默认为true
    [[Value]]: 包含这个属性的值,读取的时候从这个位置读取,写入的时候把新值保存在此位置,这个特性默认为undefined

    2.访问器属性

    访问器属性不包含数据值,包含一对getter和setter函数,访问器属性不能直接定义,必须使用Object.defineProperty()来定义


    [[Configurable]]:表示是否能通过delete杉树属性而从新定义属性,是否能修改属性的特性,是否能把属性修改为访问器属性,直接在对象上定义的属性 ,这个特性默认为true
    [[Enumerable]]:表示能付通过for-in 循环返回属性,直接在对象上定义的属性 ,这个特性默认为true
    [[Get]]: 读取属性时调用的函数,性默认为undefined
    [[Set]]: 写入属性时调用的函数,性默认为undefined

    ⚠️注意:不一定非要同事制定get和set函数,只制定get意味着属性是只读属性不能写入

    // 直接定义在对象上的属性默认特性都为true
    var person = {name:'xiangxiang'}
    Object.getOwnPropertyDescriptor(person,'name')
    // {value: "xiangxiang", writable: true, enumerable: true, configurable: true}
    
    // 当直接用defineProperty去定义一个属性的时候不指定其他值 属性默认特性都为false
    Object.defineProperty(person,'age',{value:18})
    Object.getOwnPropertyDescriptor(person,'age')
    // {value: 18, writable: false, enumerable: false, configurable: false}
    
    // 修改age
    person.age = 19
    // person {name: 'xiangxiang', age: 18}
    // 默认特性writable fals
    
    6.1.2 定义多个属性
    Object.defineProperties(obj,{
      a:{value:1},
      b:{value:2},
     }) 
    
    6.1.3 读取属性的特性

    Object.getOwnPropertyDescriptor(obj,'a') 获取a这个属性的描述符

    6.2 创建对象

    虽然Object构造函数和对象字面量都可以用来创建单个对象。但是这些方式有一个明显的缺点,使用同一个接口创建很多对象,会产生大量的重复代码

    6.2.1 工厂模式

    相关文章

      网友评论

          本文标题:高级程序设计读书笔记(六)---对象

          本文链接:https://www.haomeiwen.com/subject/tplqtqtx.html