一、prototype模版定义类例子
function ShapeBase(){
}
ShapeBase.prototype={
show:function()
{
alert("我是基本形状 show");
},
init:function() {
alert("ShapeBase init");
}
};
function Rect(){
}
Rect.prototype=new ShapeBase(); //继承 复制父模板
//如果直接赋值Rect.propotype=ShapeBase.propotype;修改Rect模板后会影响父模板
Rect.prototype.show=function (){ //覆盖父类方法
alert("我是矩形。。。。");
};
二、解读模板原理
//构造函数
function Person(name, sex) {
this.name = name;
this.sex = sex;
}
// 定义Person的原型,原型中的属性可以被自定义对象引用
Person.prototype = {
getName: function() {
return this.name;
},
getSex: function() {
return this.sex;
}
}
var zhang = new Person("ZhangSan", "man");
console.log(zhang.getName()); // "ZhangSan"
var chun = new Person("ChunHua", "woman");
console.log(chun.getName()); // "ChunHua"
- 创建一个空白对象(new Object())。
- 拷贝Person.prototype中的属性(键值对)到这个空对象中(我们前面提到,内部实现时不是拷贝而是一个隐藏的链接)。
- 将这个对象通过this关键字传递到构造函数中并执行构造函数。
- 将这个对象赋值给变量zhang。
更多详细解读:http://www.nowamagic.net/javascript/js_ExampleForInheritance.php