面向对象的程序设计——理解对象

本文介绍了ECMAScript中对象的概念及其属性类型,包括数据属性和访问器属性,并详细解释了如何使用Object.defineProperty()方法来定义这些属性。

面向对象的程序设计

ECMA-262 把对象定义为:无须属性的集合,其属性可以包含基本值、对象或者函数。

理解对象

var person = new Object();		//创建对象
person.name = "Nicholas";		//添加属性
person.age = 29;
person.job = "teacher";
person.sayName = function(){	//添加方法,this 表示当前作用域下的对象;this 表示new Objecy() 实例化出来的那个对象;this 要放在一个作用域下,比如person.sayName()是person 下的方法,方法可用this 表示方法本身。
    alert(this.name);
};
复制代码

属性类型

ECMAScript 中有两种属性:数据属性和访问器属性,它们不能在JavaScript 中直接访问,规范把它们放在了两对[[]]中间,如:[[Enumerable]]。

数据属性 数据属性是包含一个数据值的属性,在这个位置可以读取和写入值。4个特性 [[Configurable]]:表示能否通过delete删除属性、能否修改属性的特性,能否把属性修改为访问器属性。默认true[[Enumerable]:表示能通过for-in循环返回属性。默认true[[Writable]]:表示能否修改属性值。默认true[[Value]]:包含这个属性的数据值。默认undefined。 例:

var person = {
    name: "Nicholas"		//[[Value]]的特性将这里设置为"Nicholas",对这个值的任何修改都讲反应在这里。
};
复制代码

要修改默认特性,要使用Object.defineProperty()方法。接收三个参数:属性所在的对象,属性的名字和一个描述符对象。描述符对象必须是configurableenumerablewritablevalue。 例:

var person = {};
Object.defineProperty(person,"name",{		//person:属性所在的对象;name:属性名;花括号内是描述符对象
    writable: false,			//只读模式,true写入模式
    value: "Nicholas"
});
person.name = "zhangsan";
alert(person.name);				//打印"Nicholas" 因为这边是只读模式
复制代码

在调用Object.defineProperty()时如果不指定configurableenumerablewritable,默认都是false

访问器属性 访问器属性不包含数据值,它们包含一对gettersetter函数。 getter:读取访问器属性调用 setter:写入访问器属性调用 4个特性: [[Configurable]]:表示能否通过delete删除属性、能否修改属性的特性,能否把属性修改为访问器属性。默认true[[Enumerable]:表示能通过for-in循环返回属性。默认true[[getter]]:读取访问器属性调用,默认undefined[[setter]]:写入访问器属性调用,默认undefined

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值