面向对象(一):对象属性

对象属性类型
每个对象都是基于一个引用类型创建的
1. 数据属性
2. 访问器属性

【数据属性】

4个特性:
1. [[Configurable]]:能否delete属性从而重新定义属性、能否修改属性的特性、能否把属性改为访问器属性
2. [[Enumerable]]:能否用for-in循环返回属性
3. [[Writable]]:能否修改属性的值
4. [[Value]]:包含该属性的值

**已经在对象上直接定义的属性,其[[Confgurable]]、[[Enumerable]]、[[Writable]]默认值为true,
[[Value]]默认值为undefined

**通过Object.defineProperty()方法创建一个新属性时,其[[Confgurable]]、[[Enumerable]]、
[[Writable]]默认值为false。
修改属性默认特性的方法:
Object.defineProperty(属性所属对象,“属性名”,{
                    要修改的特性1:修改值,
                    要修改的特性2:修改值,
                    ……
                    });
**需要注意的是,一旦把configurable修改为false,就再也不能修改该属性的特性(除了writable,可以由true改为false,但不能由false
改为true);
**当configurable修改为false时,包括configurable本身也不能改为true;
**当configurable修改为false时,该属性会被禁止删除
var person = {};
Object.defineProperty(person,"name",{
    configurable: false,
    value: "karine"
});
console.log(person.name); //karine

【访问器属性】

4个特性:
1. [[Configurable]]:能否delete属性从而重新定义属性、能否修改属性的特性、能否把属性改为访问器属性。
默认值为false
2. [[Enumerable]]:能否用for-in循环返回属性。默认值为false
3. [[Get]]:读取属性时调用的函数。默认值为undefined
4. [[Set]]:写入属性时调用的函数。默认值为undefined

访问器属性不能直接在对象上定义,必须Object.defineProperty(属性所属对象,“属性名”,{
                                    要定义的特性1:值,
                                    要定义的特性2:值,
                                    ……
                                    });
                               旧方法:
                                    对象名.__defineGetter__(“属性名”,function(){
                                        …;});
                                    对象名.__defineSetter__(“属性名”,function(){
                                        …;});

定义对象的属性:

1. 一个属性
        Object.defineProperty(属性所属对象名,“属性名”,{
                                特性1:……,
                                特性2:……,
                                ……
                                    });
2. 多个属性
        Object.defineProperties(对象名,{
                                属性1:{
                                    特性1: …,
                                    特性2: …,
                                    …
                                    },
                                属性2:{
                                    特性1: …,
                                    特性2: …,
                                    …
                                    }
                                });

读取对象的属性特性

1. var descriptor = Object.getOwnPropertyDescriptor(对象名,"属性名"); //返回一个对象
   descriptor.特性;
2. Object.getOwnPropertyDescriptor(实例名,“属性名”)//取得实例属性的属性特性
3. Object.getOwnPropertyDescriptor(构造函数名.prototype, "属性名")//取得原型属性的属性特性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值