1、拷贝继承
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
function Aaa(){//父类
this.name='张三';
}
Aaa.prototype.showname=function(){
alert(this.name);
}
// a.showname();
function Bbb(){ //子类
Aaa.call(this); //属性的继承
}
//方法的继承
//Bbb.prototype=Aaa.prototype;//引用
// for(var i in Aaa.prototype){ //拷贝
// Bbb.prototype[i]=Aaa.prototype[i];
// }
extend(Bbb.prototype,Aaa.prototype);
Bbb.prototype.showname=function(){
alert(123);
}
var a=new Aaa();
a.showname();
var b=new Bbb();
b.showname();
function extend(obj1,obj2){
for(var i in obj2){
obj1[i]=obj2[i];
}
}
</script>
</head>
<body>
</body>
</html>
2、简单的类式继承
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
//js是没有类的概念的,所有我们通常把构造函数当做类来使用
function Aaa(){
this.name='张三';
}
Aaa.prototype.showname=function(){
alert(this.name);
}
var a=new Aaa();
// a.showname();
function Bbb(){
}
Bbb.prototype=new Aaa();//用什么方法能够实现一句话进行对象的拷贝:类式继承
var b=new Bbb();
alert(b.name);
</script>
</head>
<body>
</body>
</html>
3、完善的类式继承
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
//js是没有类的概念的,所有我们通常把构造函数当做类来使用
function Aaa(){
this.name='张三';
}
Aaa.prototype.showname=function(){
alert(this.name);
}
var a=new Aaa();
// a.showname();
function Bbb(){ //属性还是用call实现继承
Aaa.call(this);
}
//方法借助中间的一个类实现
function Fff(){
}
Fff.prototype=Aaa.prototype;
Bbb.prototype=new Fff();
Bbb.prototype.constructor=Bbb;
// Bbb.prototype=new Aaa();//用什么方法能够实现一句话进行对象的拷贝:类式继承
var b=new Bbb();
alert(b.name);
</script>
</head>
<body>
</body>
</html>
4、原型继承
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
var a={
name:'张三'
}
var b=cloneobj(a);
b.name='李四';
alert(a.name);
alert(b.name);
function cloneobj(obj){//原型继承
var f=function(){};
f.prototype=obj;
return new f();
}
//拷贝继承:比较通用的方式,有无new都可以用
//类式继承:new 构造函数
//原型继承:无new对象
</script>
</head>
<body>
</body>
</html>