继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。继承可以高效利用之前封装过的类,而不影响之前的类的属性、功能。继承也是对被继承类的拓展,使其具有更多功能,下边简单写写我的理解。
//父类
function Supper(msg) {
this.msg = msg;
this.supperVal = "supperVal";
}
Supper.prototype.say = function () {
console.log(this.msg);
}
Supper.prototype.getSupperVal = function () {
return this.supperVal;
}
new Supper("i am supper").say(); // i am supper
//子类
function Sub(msg) {
this.name = "sub"; //对父类的拓展,父类没有,而子类有的属性
this.msg = msg; //覆盖、修改父类的属性
}
Sub.prototype = new Supper("supper class"); //这里只是修改了父类的msg
//拓展了一个新的方法、功能
Sub.prototype.who = function () {
console.log(this.name);
}
var sub = new Sub("i am sub"); //子类msg为 i am sub
sub.who(); // sub,这里是对父类的属性、方法进行的拓展
sub.say(); // i am sub,这里是对父类的属性进行覆盖
sub.getSupperVal(); //supperVal,这里是对父类的属性进行继承

这样做,子类就继承了父类的全部属性,并且还新增了一个属性name,覆盖了父类的msg属性,而且也新增了一个方法who。当子类调用say()方法,输出i am sub而不是supper class,这个和js原型链、this有关了,这里不做讨论。
这里其实有一点瑕疵,如果suuperVal使用引用模式的话就会出现,下一篇文章继承模式二做讨论。
网友评论