类继承和原型继承的弊端:
它们在客户端是无法继承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