<JS高级程序设计>--对象

今天,我们来一起看下JS中的对象。

在JS中,对象是一种基本数据类型,而且它也是最重要的数据类型。

  1.对象和属性的关系

对象是一种符合数据类型。简单的来说,对象是一个无序的属性集合,每个属性都有自己的名字和值,存储在对象中的已命名的值既可以是数组和字符串这样的原始值,也可以是对象。

2.对象的创建

我们通过运算符new来创建对象。在这个运算符之后必须有用于初始化的构造函数。例如,我们用如下的方式创建一个空对象(即没有属性的对象)

  var o  = new Object();

JS支持内部构造函数,他们可以一种简单的方式初始化新创建的对象。例如,构造函数Date()可以初始化一个表示日期和时间的对象。

var now  = new Date();                            //表示当前的日期

var new_years_eve = new Date(2000, 11, 31); //表示2000年12月31日

另外对象直接量提供了另外一种创建并初始化新对象的方式。使用对象直接量,可以把对象的说明直接嵌入到JS代码中,就想把文本数据作为引用的字符串嵌入到JS代码一样。对象直接量由属性说明列表构成,列表包含在大括号中,其中的属性由逗号隔开。对象直接量中的每个属性说明都由属性名加上冒号和属性值构成,例如:

var circle = {x:0, y:0, radius:2};
var home = {mom:"lihua ",dad:'zhirong",child:"enlove"
}

3.属性的查询和设置

通常使用"."运算符来存取对象的属性。"."运算符左边的是对对象的引用,右边则为其属性名。

4.属性的枚举

我们可以通过for/in循环进行遍历。

注意:for/in循环列出的属性并没有特定的顺序,而且虽然他能枚举出的所有的用户定义的属性,但却不能枚举出某些预定义的属性或者方法。

5.未定义的属性

如果要读取一个不存在的属性(即还没有被赋值的属性)的值,那么得到的是undefinded。

我们可以使用运算符delete来删除一个对象的属性。例如:

delete book.chapter;
注意,删除一个属性不仅仅是吧该属性设为undefined,而是真正的从对象中移出了该属性。可以尝试用for/in循环看看区别。

6.构造函数
构造函数通常没有返回值,他们只是初始化由this值传递进来的对象,并且什么也不返回。但是,构造函数可以返回一个对象值,如果这样做,被返回的对象就成了new表达式的值。这样的情况下,this值所引用的对象就被丢弃了。

7.方法

函数就是数值,他们所引用的名字没有任何特殊之处。可以将函数赋给任何变量,甚至赋给一个对象的属性。例如,一个函数f和一个对象o,就可以使用如下的代码定义一个名为m的方法:

o.a = f;  //将函数f赋给对象o的属性a
定义了对象o的方法m()后,就可以采用下面的方式来调用它

o.m();
如果m()需要两实际的参数,那么可以用下面的方法来调用它:
o.m(x,x+2);
方法有一个特别重要的属性,即在方法主体内部,关键字this的值就变成了调用该方法的对象,。例如,在调用o.m()方法时,方法的主体可以使用关键字this来引用对象o。

8.原形对象和继承

用构造函数将方法赋予它要初始化的对象,效率非常的低。JS中对象都"继承"原型对象的属性,每个对象都有原型对象,原型对象的所有属性是以它为原型的对象的属性,也就是说,

每个对象都继承原型对象的所有属性。

JS中所有的函数都有prototype属性(这个属性是您能有能力向对象添加属性),它引用了一个对象。虽然原型对象初始化时空的,但是你在其中定义的任何属性都会被该构造函数创建的所有对象继承。

注意,继承是在查询一个属性值时自动发生的,属性并非从原型对象复制到新的对象的,他们只不过看起来像是那些对象的属性,这其中有两点重要的含义;一是使用原型对象可以大量减少每个对象对内存的需求,

因为每个对象可以继承许多属性,二是即使属性在对象被创建之后才添加到它的原型对象中,对象也能够继承这些属性。

每个类都有一个原型对象,这个原型对象都具有一个属性,但是实际上却有大量的类实例,每个实例都能继承原型对象的属性。由于一个原型对象能够被多个对象继承,所以JS必须强化读写属性值之间的不对称性。在读对象o的属性p时,JS首先检查的是o是否具有一个名为p的属性,如果o没有这个属性,JS会检查o的原型对象是否具有这个属性。这样才使得以原型对象为基础的继承机制起作用。

注意的是,属性的继承只发生在读属性值时,而不发生在写属性值。

9.面向对象的Js

虽然JS支持我们称为对象的数据类型,但是他们并没有正式的类的概念。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值