JavaScript 中支持面向对象的基础

本文介绍了JavaScript中类的定义方法及实例化过程,探讨了如何使用方括号引用对象属性和方法,展示了灵活的对象操作技巧。
1、用定义函数的方式定义类
在面向对象的思想中,最核心的概念之一就是类。一个类表示了具有相似性质的一类事
物的抽象,通过实例化一个类,可以获得属于该类的一个实例(即对象)。
在JavaScript中定义一个类的方法如下:
function class1(){
//类成员的定义及构造函数
}
这里class1 既是一个函数也是一个类。作为函数,它可以理解为类的构造函数,负责初
始化的工作。
6.1.2 使用new 操作符获得一个类的实例
在前面介绍基本对象时,已经用过new操作符,例如:
new Date();
表示创建一个日期对象,而Date 就是表示日期的类,只是这个类是由JavaScript 内部
提供的,而不是由用户定义的。
new 操作符不仅对内部类有效,对用户定义的类也是同样的用法,对于上节定义的
class1,也可以用new来获取一个实例:
function class1(){
//类成员的定义及构造函数
}
var obj1=new class1();
抛开类的概念,从代码的形式上来看,class1就是一个函数,那么是不是所有的函数都
可以用new来操作呢?答案是肯定的。在JavaScript中,函数和类就是一个概念,当new一
个函数时,就会返回一个对象。如果这个函数中没有初始化类成员,那就会返回一个空的对
象。例如:
//定义一个hello函数
function hello(){
alert(“hello”);
}
//通过new一个函数获得一个对象
var obj=new hello();
alert(typeof(obj));
从运行结果看,执行了hello函数,同时obj也获得了一个对象的引用。事实上,当new
一个函数时,这个函数就是所代表类的构造函数,其中的所有代码都可以看作为了初始化一
个对象而工作。用于表示类的函数也称之为构造器。
2、使用方括号([])引用对象的属性和方法
在JavaScript中,每个对象可以看作是多个属性(方法)的集合,引用一个属性(方法)
很简单,即:
对象名.属性(方法)名
除此之外,还可以用方括号的形式来引用:
对象名[“属性(方法)名”]
注意,这里的方法名和属性名是一个字符串,而非原先点号后面的标识符,例如:
var arr=new Array();
//为数组添加一个元素
arr[“push”](“abc”);
//获得数组的长度
var len=arr[“length”];
//输出数组的长度
alert(len);
由此可见,上面的代码等价于:
var arr=new Array();
//为数组添加一个元素
arr.push( “abc”);
//获得数组的长度
var len=arr.length;
//输出数组的长度
alert(len);
这种引用属性(方法)的方式和数组类似,也体现出一个JavaScript对象就是一组属性
(方法)的集合这个性质。
这种用法适合不确定具体要引用哪个属性(方法)的场合,例如:一个对象用于表示用
户资料,这时一个字符串表示要使用哪个属性,那就可以用这种方式来引用:
<script language="JavaScript" type="text/javascript">
<!--
//定义了一个User 类,包括两个成员age和sex,并指定了初始值。
function User(){
this.age=21;
this.sex="male";
}
//创建user 对象
var user=new User();
//根据下拉列表框显示用户的信息
function show(slt){
if(slt.selectedIndex!=0){
alert(user[slt.value]);
}
}
//-->
</script>
<!--下拉列表框用于选择用户信息-->
<select onchange="show(this)">
<option>请选择需要查看的信息:</option>
<option value="age">年龄</option>
<option value="sex">性别</option>
</select>
在这段代码中,使用一个下拉列表框让用户选择查看哪个信息,每个选项的value就表
示用户对象的属性名称。这时如果不采用方括号的形式,就必须使用如下代码来达到预期效
果:
function show(slt){
if(slt.selectedIndex!=0){
if(slt.value==”age”)alert(user.age);
if(slt.value==”sex”)alert(user.sex);
}
}
而使用方括号语法,则只需写为:
alert(user[slt.value]);
由此可见,方括号语法更像一种参数语法,可用一个变量来表示引用对象的哪个属性。
如果不采用这种方法,又不想用条件判断,可以使用eval函数:
alert(eval(“user.”+slt.value));
这里利用eval函数的性质,执行了一段动态生成的代码,并返回了结果。
实际上,在前面讲述document 的集合对象时,就有类似方括号的用法,比如引用页面
中一个名为“theForm”的表单对象,曾经的用法是:
document.forms[“theForm”];
其实也可以写为:
document.forms.theForm;
但这里的forms 对象是一个内部对象,和自定义对象不同的是,它还可以用索引来引用
其中的一个属性。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值