美文网首页
JS高程学习-第六章(一)---认识对象

JS高程学习-第六章(一)---认识对象

作者: 槑小姐_1419 | 来源:发表于2019-11-27 20:18 被阅读0次

    认识对象

    什么是对象 无序属性的集合,其属性可以包含基本值、对象或者函数 哈希表

    1. 属性类型

    对象在创建时都带有一些特征值 【es5 中使用属性描述了这些特性】【定义行为】

    属性分为两种属性,不同的属性拥有不同的特征 数据属性访问器属性

    --

    数据属性: 一般我们直接定义赋值的都是数据属性
    数据属性有四个描述其行为的特征:可删除,for-in可遍历,可修改,数据值
    默认 : [[Configurable]] 、 [[Enumerable ]] 、 [[ Writable ]] 默认为 true

    ​ [[ Value ]] 默认为 undefined

    在调用Object.defineProperty()方法创建一个新的属性时[描述符对象],如果不指定,configurableenumerablewritable 特性的默认值都是 false

    
    //普通的属性 赋值 读取 
    var a = {'b':'c'}
    
    a.b = 20;
    // 内部属性 赋值读取 
    // 有一些内置属性具有指定的特征
    // Math.PI  此值就不可以修改
    
    Math.PI = 10 
    
    // 修改特征 
    
    var obj = {};
    //  三个参数  属性所在的对象 ,属性的名字 和 一个描述符对象
    Object.defineProperty(obj, 'name', {
        writable: false,  // 不能修改值
        value: '张三'
    })
    
    console.log(obj.name); // 张三
    obj.name = '李四';
    console.log(obj.name); // 张三,  writable设为 false 后,值就没法修改了。
    
    var person = {
        name: '李四',
        age: 24
    }
    
    delete person.name;
    console.log(person); // {age: 24}
    
    Object.defineProperty(person, 'age', {
        configurable: false
    })
    
    delete person.age; 
    console.log(person);// {age: 24} configurable特性设为 false 后,就没法使用 delete 删除了。
    
    

    访问器属性 : 包含一对 getter setter 函数 (都不是必须的) 。允许用户在赋值或取值都经过预先设定的函数,从而实现内部属性的那一种特殊效果。
    同样具有四个特征;

    可删除,可遍历,get时调用的函数,set时调用的函数

    var book = {
        _year : 2004,//_year前面下划线是常用的记号,表示只能通过对象方法访问的属性
        edition : 1
    };
    // year 就是访问器属性 
    Object.defineProperty(book,"year",{ 
        get : function () {
            return this._year;
        },
        set : function (newValue) {
    
            if (newValue > 2004) {
                this._year = newValue;
                this.edition += newValue - 2004;
            }
        }
    
    });
    
    book.year  即调用 get 方法  赋值的时候 就调用 set 方法 
    // 我们当前的 vue 就是使用这个方法,来保证 数据双向绑定
    
    

    2.定义多个属性

    Object.defineProperties() 可以通过描述符一个定义多个属性。

    // 接收两个参数  添加属性的对象  包含多个需要添加和修改的属性的对象
    Object.defineProperty(book,{
        "year":{ 
            get : function () {
                return this._year;
            },
            set : function (newValue) {
    
                if (newValue > 2004) {
                    this._year = newValue;
                    this.edition += newValue - 2004;
                }
        },
        "name":{
            value:10
        }
    });
    
    3.读取属性的特性

    getOwnPropertyDescriptor

    学习整理

    JS高程学习-第六章(一)---认识对象
    JS高程学习-第六章(二)---创建对象
    JS高程学习-第六章(三)---对象继承

    相关文章

      网友评论

          本文标题:JS高程学习-第六章(一)---认识对象

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