javaScript高级程序设计--对象

对象
 1.定义
:就是无序属性的集合,其属性可以包含基本值、对象或者函数。

 2.用法:字面量的形式创建对象,说白了就是“{}”。

 3.对象中的属性,分为两种:数据属性和访问器属性

 3.1 数据属性:这种属性会有对应的值(可以认为就是我们常见的对象的属性),该属性的特性(如是否可以修改值,是否可以删除等等),分别是:configurable(是否可以删除属性等,默认true),enumerable(是否可以循环返回属性,默认true), writable(是否可以复写属性值,默认true),value(属性的值,默认undefined)
 修改对象中数据属性的默认特性:Object.defineProperty(targetObj,property,descriptor),其中最后一个参数是一个对象,其属性是对象的数据属性的特性参数的一个或者多个;

 var app = {
            name:"王者荣耀",//数据属性
            isPlayed:false//数据属性
        }
        Object.defineProperty(app,"name",{
            writable:false,//不可更改
            configurable:false//不可删除
        })
        app.name = "吃鸡游戏";
        console.log(app.name)//还是“王者荣耀”
        delete app.name;
        console.log(app.name)//该属性还是存在,“王者荣耀”。
        var person = {
            name:"张三",
            age:23
        }
        Object.defineProperty(person,"age",{configurable:false});
        delete person.age;
        console.log(person.age)//undefined,因为已经删除了
3.2 访问器属性: 归根结底还是对象中的属性只不过这种属性没有值--它们包含一对儿 getter 和 setter 函数,在读取访问器属性时,会调用 getter 函数,在设置访问器属性的时候,会调用setter函数并传入新值。
 3.2.1 定义访问器属性:访问器属性不能像定义数据属性那样可以直接定义---定义访问器属性:Object.defineProperty(targetObj,property,{
                get:callback;
                set:callback(newvalue)
            })
 3.2.2 访问器属性有四个特性:configurable(和之前的差不多),enumerable,get(访问属性时调用的函数,默认undefined); set(设置属性时调用的函数,默认undefined);
/* 访问器属性 */
        var animal = {
            class:"狗狗",
            name:"哈士奇",
            form:"地球",
            _hobby:"⛏破坏"
        }
        // 定义对象animal的访问器属性hobby:怎么看着那么像设置访问器属性的特性??
        Object.defineProperty(animal,"hobby",{
            configurable:false,//该属性不可删除
            get:function(){//getter函数
                return this._hobby;
            },
            set:function(newValue){//setter函数
                alert(newValue)
            }
        })
        alert(animal.hobby)//此时访问对象的访问器属性hobby,所以调用get函数,返回对象的“_hobby”属性
        animal.hobby = "犯二"//犯二,此时是设置访问器属性,调用set函数,所以回弹出“犯二”
        delete animal.hobby;//将删除属性,但是却删除不了
        alert(animal.hobby)//访问该属性,所以会返回”⛏破坏“
4.一次给对象设置多种属性:

4.1 方法:Object.defineProperties(obj,{...}):通过这个方法可以一次性为对象同时定义这两种属性:obj是要对其定义的目标对象,{..}属性对象;

var douProp = {};
        Object.defineProperties(douProp,{
            height:{//数据属性
                value:3.33
            },
            width:{//数据属性
                value:9.00
            },
            length:{//访问器属性
                get:function(){
                    return this.height
                },
                set:function(newValue){
                    alert(newValue)
                }
            }
        })

 4.2  获取对象属性的特性:Object.getOwnPropertyDescriptor(targetObj,prop):得到哪个对象的哪个属性的特性。




猜你喜欢

转载自blog.csdn.net/codesWay/article/details/80053827