/**
* @param {String} className
* @param {String/Function} superClass
* @param {Function} classImp
*/
function
$class(className, superClass, classImp){
if
(superClass ===
""
) superClass = Object;
var
clazz =
function
(){
return
function
(){
if
(
typeof
this
.init ==
"function"
){
this
.init.apply(
this
, arguments);
}
};
}();
var
p = clazz.prototype =
new
superClass();
var
_super = superClass.prototype;
window[className] = clazz;
classImp.apply(p, [_super]);
}
|
定义父类Person
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
/**
* 父类 Person
*/
$class(
'Person'
,
''
,
function
(){
this
.init =
function
(name){
this
.name = name;
};
this
.getName =
function
(){
return
this
.name;
};
this
.setName =
function
(name){
this
.name = name;
}
});
|
子类Man
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
/**
* 子类 Man
*/
$class(
'Man'
, Person,
function
(supr){
this
.init =
function
(name, age){
supr.init.apply(
this
,[name]);
// 该句很重要
this
.age = age;
};
this
.getAge =
function
(){
return
this
.age;
};
this
.setAge =
function
(age){
this
.age = age;
};
});
var
m =
new
Man(
'Jack'
,25);
console.log(m.name);
// Jack
console.log(m.age);
// 25
|
从输出看可以看到子类Man的确继承了父类的属性和方法。