javascript面向对象编程--继承--实例继承

类继承和原型继承的弊端:

         它们在客户端是无法继承DOM对象的,同时他们也不支持继承系统对象和方法

类继承:

function D(){ Date.apply(this.arguments);}

var d=new D();

alert(d.toLocaleString());//返回[object object]

说明类继承是无法是想对静态对象的继承,这是因为系统对象的结构比较特殊,它不是简单的函数题结构,声明、赋值、和初始化等操作都进行了独立的封装,所以无法实现在自定义构造函数中的那种操作

类继承:不继承原型属性,继承本地成员,支持多重继承,支持多参数 执行效率高,instanceof为false

原型继承:

 function D(){}

 D.prototype=new Date();

var d=new D();

alert(d.toLocalString());//返回错误提示

原型继承:继承原型属性,不继承本地成员,不支持多重继承,不支持多参数,执行效率高,instanceof为true

实例继承:

  构造函数是一种特殊结构的函数,没有返回值,通过this关键字来初始化实例对象,并且会返回值(其实省略return new运算表达式的值);因此在构造函数中完成对 类的实例化操作,然后返回实例对象,这就是实例继承的由来

function D(){//封装函数

    var d=new Date(); //实例化Date对象

   d.get=function(){

   alert(d.toLocaleString());

 }

 return d;//返回实例化对象

}

var d=new D();//实例化封装函数

d.get();

实例继承的优势:

 能够实现对所有对象的继承,包括自定义类、核心对象和Dom对象等,不过实例继承不是真正的继承机制,仅是一种模拟方法

缺点:

 实例继承无法传递动态参数,类的实例化操作封闭在函数体内实现的,所以不能通过call()和apply()方法传递动态参数

 只能返回一个对象,因此不支持多重继承

无法真正实现继承对象是封装类的实例,它仍然保持与原对象的实例关系如:

alert( d instanceof Date) //true

alert( d instanceof  D) //false 说明对象d不是对象D的实例

实例继承:继承原型属性,继承本地成员,不支持多重继承,不支持多参数,执行效率中,instanceof为false

猜你喜欢

转载自blog.csdn.net/wenmin1987/article/details/82823484