继承

目的:不重复写类的相同属性和方法

function Box(_a) {
    console.log("aaa");
    this.a = _a;
    this.play();
}

Box.prototype.a = 10;
Object.defineProperty(Box.prototype, "num", {
    set: function (value) {
        this._num = value;
    },
    get: function () {
        if (!this._num) this._num = 0;
        return this._num;
    }
})
Box.prototype.play = function () {
    console.log("play");
}
Box.run = function () {

}
Box.b = 20;

继承的分类

冒充式继承

子类没有父类下的方法

function Ball(_a){
    console.log(this); 
    Box.call(this, _a);
}
var b = new Ball(10);
console.log(b); 

组合式继承

会丢失带入的数据以及会重复执行

function Ball(_a){
         Box.call(this,_a);
}
Ball.prototype=new Box();
Ball.prototype.constructor=Ball;
var b=new Ball(10);
console.log(b)

原型式继承

创建一个空的类,这样就可以不执行Box中的constructor了

function Ball(_a){
    Box.call(this._a)
}
function F(){}
F.prototype=Box.prototype;
Ball.prototype=new F();
Ball.prototype.constructor=Ball;
let b=new Ball(10);
console.log(b);

寄生式继承

function Ball(_a){
    
}
function extend(subClass,supClass){
    function F(){}
    F.prototype=supClass.prototype;
    //Object.assign(subClass.prototype,new f());
    subClass.prototype=new F();
    subClass.prototype.constructor=subClass;
    subClass.prototype.superClass=supClass.prototype;
    if(supClaass.prototype.constructor!==supClass){
        supClaass.prototype.constructor=supClass
    }
}
function Ball(_a){
    this.superClass.constructor.call(this._a)
}
extend(Ball,Box);
Ball.prototype.play=function(){
    this.superClass.play.call(this);//执行超类的play方法
}
var b=new Ball(10);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 继承目的:不重复写类的相同属性和方法 摘自JavaScript高级程序设计:继承是OO语言中的一个最为人津津乐道的...
    docman阅读 4,827评论 0 1
  • day19_JS_继承进阶 1.JS中的继承 继承是面向对象中一个比较核心的概念。其他正统面向对象语言都会有两种方...
    learninginto阅读 1,715评论 0 9
  • 继承是面向对象中一个比较核心的概念。其他正统面向对象语言都会用两种方式实现继承:一个是接口实现,一个是继承。而EC...
    lovelydong阅读 2,915评论 0 2
  • 前言 上篇文章详细解析了原型、原型链的相关知识点,这篇文章讲的是和原型链有密切关联的继承,它是前端基础中很重要的一...
    OBKoro1阅读 4,954评论 0 0
  • 继承的概念:子类可以使用父类共享的属性和方法,避免重复代码提高代码复用性。 原型链:子类可以共享父类的实例对象和实...
    浅秋_6672阅读 3,085评论 0 0

友情链接更多精彩内容