1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
<%@ page language=
"java"
import=
"java.util.*"
pageEncoding=
"UTF-8"
%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+
"://"
+request.getServerName()+
":"
+request.getServerPort()+path+
"/"
;
%>
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
>
<html>
<head>
<base href=
"<%=basePath%>"
>
<title>My JSP
'oop7.jsp'
starting page</title>
<meta http-equiv=
"pragma"
content=
"no-cache"
>
<meta http-equiv=
"cache-control"
content=
"no-cache"
>
<meta http-equiv=
"expires"
content=
"0"
>
<meta http-equiv=
"keywords"
content=
"keyword1,keyword2,keyword3"
>
<meta http-equiv=
"description"
content=
"This is my page"
>
<!--
<link rel=
"stylesheet"
type=
"text/css"
href=
"styles.css"
>
-->
<script type=
"text/javascript"
>
//实现只继承父类的原型对象
function
extend(Sub,Sup){
//1.用一个空函数进行中转
//穿件一个空函数,目的:中转
var
F=
new
Function();
F.prototype=Sup.prototype;
//实现空函数的原型对象和超类的原型对象转换
Sub.prototype=
new
F();
//原型继承
Sub.prototype.constructor=Sub;
//还原子类的构造器
//保存父类的原型对象 1.方便解耦 2.可以方便获得分类的原型对象
Sub.superClass=Sup.prototype;
//自定义一个子类的静态属性,接收父类的原型对象
if
(Sup.prototype.constructor==Object.prototype.constructor){
Sup.prototype.constructor=Sup;
//手动还原父类原型对象的构造器
}
}
//混合继承:原型继承+构造函数继承
function
Person(name,age){
this
.name=name;
this
.age=age;
}
Person.prototype={
constructor:Person,
sayName:
function
(){
alert(
this
.name);
}
}
function
Boy(name,age,sex){
Boy.superClass.constructor.call(
this
,name,age);
//绑定父类的模板函数,借用构造,支复制了父类的模板
this
.sex=sex;
}
//Boy.prototype=new Person(); //既继承了父类的模板,又继承了父类的原型,但由于不习惯于在new Person时传入参数,所以会再使用call函数继承模板
extend(Boy,Person);
//给子类加上一个父类的覆盖方法
Boy.prototype.sayName=
function
(){
alert(
'子类复写方法'
);
}
var
b=
new
Boy(
'张三'
,23,
'男'
);
alert(b.sex);
b.sayName();
Boy.superClass.sayName.call(b);
//调用父类的同名函数
//3件事
//混合继承缺点:继承了两次父类的模板,一次父类的原型对象
//2集成一次父类的模板,一次父类的原型对象
//只继承一遍父类的模板 自定义方法实现只继承一遍父类的模板extend方法
</script>
</head>
<body>
This is my JSP page. <br>
</body>
</html>
|
本文转自 matengbing 51CTO博客,原文链接:http://blog.51cto.com/matengbing/1879664