日期:2014-05-16  浏览次数:20401 次

javascript对象继承的几种方法

前面一篇文章有降到javascript对象的创建,http://zzx19452008-163-com.iteye.com/admin/blogs/1157889

?

这里继续讲javascript中对象的继承的实现。javascript中对象的继承有5种

一:对象冒充

?

?所谓对象冒充,就是新的类冒充旧的类(旧的类必须采用构造函数方式),从而达到继承目的.

? ? ? ? eg.1

? ? ? ? ? ? function people(name,sex,age){ ? ?//使用构造函数方式

? ? ? ? ? ? ? ? this.name=name;

? ? ? ? ? ? ? ? this.sex=sex;

? ? ? ? ? ? ? ? this.age=age;

? ? ? ? ? ? ? ? this.say=function(){

? ? ? ? ? ? ? ? ? ? alert("My name is "+this.name);

? ? ? ? ? ? ? ? };

? ? ? ? ? ? ? ? this.doing=function(){

? ? ? ? ? ? ? ? ? ? alert("I am speaking");

? ? ? ? ? ? ? ? };

? ? ? ? ? ? }

? ? ? ? ? ? var Marry=new people("Marry","Woman","23");

? ? ? ? ? ? Marry.say();

? ? ? ? ? ? Marry.doing();

?

? ? ? ? ? ? function white_people(name,sex,age){

? ? ? ? ? ? ? ? this.inherit=people; //也可以用new代替inherit

? ? ? ? ? ? ? ? this.inherit(name,sex,age);

? ? ? ? ? ? ? ? delete this.inherit;

?

? ? ? ? ? ? ? ? this.area=function(){

? ? ? ? ? ? ? ? ? ? alert("I am in Europe");

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? var Tom=new white_people("Tom","man","21");

? ? ? ? ? ? Tom.say();

? ? ? ? ? ? Tom.area();

? ? ? ? ? ? alert(Tom.age);

? ? ? ? 上面的例子中,people是用来做white_people的基类,记住这个格式是用来对象冒充达到继承目的的

? ? ? ? ? ? ? ? this.inherit=people; ? ? ? ? ? ?//冒充

? ? ? ? ? ? ? ? this.inherit(name,sex,age); ? ? ? ?//继承

? ? ? ? ? ? ? ? delete this.inherit; ? ? ? ? ? ?//删除继承

? ? ? ? 所有新属性和新方法都必须再删除了继承后定义,这样是为了避免覆盖父类的相关属性和方法.

? ? ? ? 另外,对象冒充支持多继承.

?

? eg.2

? ? ? ? ? ? function worker(pay,work){

? ? ? ? ? ? ? ? this.pay=pay;

? ? ? ? ? ? ? ? this.work=work;

? ? ? ? ? ? }

? ? ? ? ? ? function city_worker(name,sex,age,pay,work){

? ? ? ? ? ? ? ? this.inherit=people;

? ? ? ? ? ? ? ? this.inherit(name,sex,age);

? ? ? ? ? ? ? ? delete this.inherit;

?

? ? ? ? ? ? ? ? this.inherit=worker;

? ? ? ? ? ? ? ? this.inherit(pay,work);

? ? ? ? ? ? ? ? delete this.inherit;

? ? ? ? ? ? }

?

? ? ? ? ? ? var Jerry=new city_worker("Jerry","man","21","$1000","coder");

? ? ? ? ? ? Jerry.say();

? ? ? ? ? ? alert(Jerry.work);

? ? ? ? 对象冒充有一个不足的地方:多继承机制实现时,如果基类存在相同的属性或者方法,将从后面的类继承.

二:call方式

?

只是封装的对象冒充的一个函数.这样,我们不再需要写"经典"的三句话,而是用下面这句话代替:

? ? ? ? ? ? 基类.call(对象,参数列表)

? ? ? ? eg.1

? ? ? ? ? ? function farmer(name,sex,age,pay,work){

? ? ? ? ? ? ? ? people.call(this,name,sex,age);

? ? ? ? ? ? ? ? worker.call(this,pay,work);

? ? ? ? ? ? }

?

? ? ? ? ? ? var Nicholas=new farmer("Nicholas","man","27","$3000","irrigator");

? ?