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

来源:互联网 发布:plc称重模块怎样编程 编辑:程序博客网 时间:2024/05/19 00:56

对象属性类型

每个对象都是基于一个引用类型创建的

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属性从而重新定义属性、能否修改属性的特性、能否把属性改为访问器属性。默认值为false2. [[Enumerable]]:能否用for-in循环返回属性。默认值为false3. [[Get]]:读取属性时调用的函数。默认值为undefined4. [[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, "属性名")//取得原型属性的属性特性
原创粉丝点击