首页 > 代码库 > 8月4号=》341页-345页
8月4号=》341页-345页
13.10 使用对象
13.10.1 面向对象的概念
JavaScript并不是面向对象的程序设计语言,面向对象设计的基本特征:继承、
多态等没有得到很好的实现。比如Java中的类,所有的类都可以通过extends显示
继承父类,或者默认继承系统的Object类。而JavaScript并没有提供规范的语法让
开发者定义类。
例如在Java中可以通过下列代码创建Person实例:
Person p = new Person();
在JavaScript中的每个函数都可用于创建对象,返回的对象既是该类的实例,也
是object类的实例。
代码示范:
function Person(name)
{
this.name = name;
}
var p = new Person(‘张三‘);
if(p instanceof Person)
{
alert("p是Person的实例");
}
if(p instanceof object)
{
alert("p是object的实例");
}
结果输出为:"p是Person的实例","p是object的实例"。
13.10.2 对象和关联数组
在JavaScript中的对象本质上是一个关联数组,或者说更像java里德Map数据结构,由一组
key-value对组成。因此,当需要访问某个JavaScript对象的属性时,不仅可以使用obj.propName
的形式,也可以采用obj[propName]的形式。
代码示范:
function Person(name)
{
this.name = name;
}
var p = new Person("张三");
alert(p.name);
输出结果为:张三。
13.10.3 继承和prototype
在面向对象的程序设计语言里,类与类之间有显示的继承关系,一个类可以显示地制定继承
自哪个类,子类将具有父类的所有属性和方法。JavaScript虽然也支持类、对象的概念,但
没有继承的概念,只能通过一种特殊的手段来扩展原有的JavaScript类。
这种特殊手段也就是函数,JavaScript的所有类都有一个prototype属性,当我们为JavaScript类
的prototype属性增加函数、属性时,则可视为对原有类的扩展。我们可以理解为:增加了prototype
属性的类继承了原有的类--这就是JavaScript所提供的伪继承机制。
代码示范:
//定义一个Person函数,同时也定义了Person类
function Person(name,age)
{
this.name = name;
this.age = age;
this.info = function()
{
document.writeln("姓名:"+this.name);
document.writeln("年龄:"+this.age);
}
}
创建Person的实例p1
var p1 = new Person("张三",27);
//此处不可调用walk方法,变量p1还没有walk方法
//将walk方法增加到Person的prototype属性上
Person.prototype.walk = function()
{
document.writeln(this.name+"正在慢慢溜达");
}
//此处p1继承了新方法walk
//调用info和walk方法
p1.info();
p1.walk();
输出结果:姓名:张三 年龄:27 张三正在慢慢溜达。