JavaScript原型

1.使用原型实现的js的面向对象

"原型"表对象的原始状态,JS中的每一个对象都有一个prototype属性,但是只用Function类型的prototype属性可以使用脚本直接操作。object的prototype属于内部属性,无法直接操作。prototype属性本身是一个object类型。一个函数的prototype上所有定义的属性和方法,都会在其实例对象上存在。

实例方法和静态方法是不同的,静态方法是不需要声明类的实例就可以使用的方法,实例方法是指必须要先使用new关键字声明一个类的实例,然后才可以通过此实例访问的方法。

下面是两种声明的方法

function staticClass() { };      //声明一个类

staticClass.staticMethod = function() {alert("static method")};       //创建一个静态方法

staticClass.prototype.instanceMethos = function() {"instance method"} ;    //创建一个实例方法

上面首先声明了一个类staticClass,接着为其添加了一个静态方法statciMethod()和一个动态方法instanceMethod,区别就在于添加动态方法要使用prototype原型属性。

对于静态方法可以直接调用:

staticClass.staticMethod();

但是实例方法不能直接调用:

staticClass.instanceMethod();  //语句错误,无法运行

实例方法需要首先实例化后才能调用:

var instance =  new staticClass();   //首先实例化

instance.instanceMethod();  //在实例上可以调用实例方法

使用prototype除了可以声明实例方法,也可以声明实例属性。正因为原型有着如此大的功能,所以能够使用原来来实现JS的面向对象。

2.使用原形链实现继承

除了面向对象的声明方式,在面向对象的世界中最常用的就是对象继承。在JS中可以通过prototype实现对象的继承。假设Car有两个派生类,一个是GoodCar,一个是BadCar.他们和Car一样都具有color属性和showColor方法

以GoodCar类为例,只要让GoodCar的prototype属性为Car类的一个实例,即可实现类型的继承:

GoodCar.prototype = new Car();

现在,GoodCar类已经有了Car的所有属性和方法:

var goodCar = new GoodCar();

goodCar.showColor();  //输出"none"

实现了继承后,GoodCar还要实现自己的run() 方法。同样使用prototype实现,下面是GoodCar类的完整定义:

//  GoodCar

function GoodCar()

{  }

GoodCar.prototype = new Car();

GoodCar.prototype.run = function() {alert("run fast");  }

需要注意GoodCar类自身的方法一定要在实现继承语句之后定义

为何称这种方式为原型链实现继承呢?因为GoodCar的prototype是Car,Car的prototype是object,也就是说GoodCar也具有object对象所有的属性和方法。这是一个

"链"的结构。使用原型可以简单快捷地实现JS的面向对象和继承。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值