今天早上把李战的<<悟透JavaScript>>看完了,感觉里面的所说的甘露模型很好,即通俗又易懂。让我对js的通用类定义,继承,对象的创建又有更深的理解。废话少说,上DEMO。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>类的定义,对象的创建,继承</title>
</head>
<body>
<script type="text/javascript">
/**
* aBaseClass: 基类对象 类型: object
* aClassDefine: 自身扩展对象 类型: object
* 主要功能是用来继承基类,并可以自定义新功能,派生出新的类。
*/
function Class(aBaseClass, aClassDefine) {
function class_() {
this.Type = aBaseClass;
for(var member in aClassDefine) {
this[member] = aClassDefine[member];
}
}
//把基类对象放在原型链上
class_.prototype = aBaseClass;
return new class_();
}
/**
* aClass: 要实例化的类名称
* aParams: 传给构造函数的参数,这里我把类的构造函数统一命名为create
* 通用实例化类模块
*/
function New(aClass, aParams) {
function new_() {
this.Type = aClass;
if(aClass.create) {
aClass.create.apply(this, aParams);
}
}
new_.prototype = aClass;
return new new_();
}
Person = {
create: function(name, age) {
this.name = name;
this.age = age;
},
sayHello: function() {
alert("Hello I'm " + this.name);
},
sayOld: function() {
alert("Hello I'm " + this.name + "," + this.age + "years old.");
}
}
var superMan = Class(Person, {
fly: function() {
alert("Hello I'm " + this.name + "," + this.age + "years old,I can fly.");
}
});
//调用通用实例化模块,并以数组形式传递构造参数
var superMan1 = New(superMan, ["superMan1",24]);
superMan1.sayHello();
superMan1.sayOld();
superMan1.fly();
</script>
</body>
</html>