(3)JavaScript继承模式一

2019-04-19  本文已影响0人  jaimor

继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。继承可以高效利用之前封装过的类,而不影响之前的类的属性、功能。继承也是对被继承类的拓展,使其具有更多功能,下边简单写写我的理解。

//父类
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使用引用模式的话就会出现,下一篇文章继承模式二做讨论。
上一篇 下一篇

猜你喜欢

热点阅读