继承第一节(call继承、拷贝继承、寄生组合继承)

1、call 继承

类式(call)继承(一般类式继承是继承属性)

调用父类,通过call来改变this(把window改成子类)达到继承属性的目的。

function Person(name,age){
        this.name = name;
        this.age = age;
    }
    function Coder(name,age,job){
        Person.call(this,name,age);//改变了this指向
        this.job = job;
        // console.log(this);//Coder
    }
    let p = new Person(‘a‘,18);
    let c = new Coder(‘ab‘,16,‘猿妹‘);

    console.log(c);//这样就继承了Person下的一些属性,

2、拷贝继承

遍历父类原型上的方法,只要是自身的就赋值给子类的原型

 function Person(name,age){
        this.name = name;
        this.age = age;
    }
    Person.prototype.say = function(){
        console.log(‘我叫‘+this.name);
    }
    Person.prototype.runing = function(){
        console.log(‘我会跑‘);
    }

    function Coder(name,age,job){
        Person.call(this,name,age);
        this.job = job;
    }
    // Coder.prototype = Person.prototype; //此时赋址了

    Object.prototype.aa = 20;

    for(let attr in Person.prototype){ //因为in会遍历原型,所以只有父类原型上的属性才会赋值
        if(Person.prototype.hasOwnProperty(attr)){
            Coder.prototype[attr] = Person.prototype[attr];
        }
    }

    Coder.prototype.runing = function(){
        console.log(‘会骑UFO‘);
    }

    let p = new Person(‘a‘,18);
    let c = new Coder(‘b‘,16,‘前端‘);

    c.runing();
    p.runing();

    console.log(Coder.prototype);//

3、

Object.create:内置Object类天生自带的方法

1.创建一个空对象

2.让新创建的空对象的__proto__指向第一个传递进来的对象

 function Person(name,age){
        this.name = name;
        this.age = age;
    }
    Person.prototype.say = function(){
        alert(‘我的名字‘+this.name);
    }
    Person.prototype.runing = function(){
        alert(‘我会跑‘);
    }

    function Coder(name,age,job){
        Person.call(this,name,age);
        this.job = job;
    }   

    Coder.prototype = Object.create(Person.prototype);

    // Coder.prototype = Object.assign({},Person.prototype); //类似拷贝

    //  Object.assign(Coder.prototype,Person.prototype)

    Coder.prototype.say = function(){
        alert(‘duang,duang,duang,123!~‘);
    }

    let c = new Coder(‘a‘,26,‘超级码农‘);
    let p = new Person(‘b‘,26);

    c.say();
    p.say();

原文地址:https://www.cnblogs.com/Allisson/p/9902065.html

时间: 2024-10-13 00:02:22

继承第一节(call继承、拷贝继承、寄生组合继承)的相关文章

JavaScript各种继承方式(六):寄生组合继承

一 原理 用寄生继承来改造组合继承. function Fruit(name){ this.name = name; } Fruit.prototype.eat = function(){ console.log('eat'); } function Mango(name,level){ Fruit.call(this,name); this.level = level; } function create(obj){ let instance = Object.create(obj); //

[js高手之路]设计模式系列课程-组合模式+寄生组合继承实战新闻列表

所谓组合模式,就是把一堆结构分解出来,组成在一起,现实中很多这样的例子,如: 1.肯德基套餐就是一种组合模式, 比如鸡腿堡套餐,一般是是由一个鸡腿堡,一包薯条,一杯可乐等组成的 2.组装的台式机同理,由主板,电源,内存条,显卡, 机箱,显示器,外设等组成的 把一个成型的产品组成部件,分成一个个独立的部件,这种方式可以做出很多灵活的产品,这就是组合模式的优势 比如:家用台式机电脑,要求配置比较低, 这个时候只需要主板+电源+内存条+机箱+显示器+外设就可以了,不需要配置独立显卡 鸡腿堡+鸡翅+紫薯

寄生组合继承

寄生组合式继承,是集寄生式继承和组合继承的有点与一身,主要是通过借用构造函数来继承属性,通过原型链的混成形式来继承方法. 先看一个例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 function inheritPrototype(SuperType, SubType){     var prototype = Object.create(SuperType.prototype);     prototype.constructor = SubType;     SubT

组合继承和寄生组合继承的区别

组合继承 核心思想:使用借用构造函数的技术实现实例属性的继承,使用原型链实现原型属性和方法的继承. function SuperType(name){ this.name = name; this.colors = ["red", "blue", "green"]; } SuperType.prototype.sayName = function(){ alert(this.name); }; function SubType(name, age

Javascript 组合继承 原型链继承 寄生继承

Javascript继承通常有三种方式. 第一种:组合式继承: function SuperType(name) { this.name = name; this.colors = ["red", "blue", "green"]; } SuperType.prototype.sayName = function() { console.log(this.name); }; function SubType(name, age) { //通过ca

通过寄生组合式继承创建js的异常类

最近项目中在做js的统一的异常处理,需要自定义异常类.理想的设计方案为:自定义一个异常错误类BaseError,继承自Error,然后再自定义若干个系统异常,例如用户取消异常.表单异常.网络异常,继承自BaseError.系统中,根据各个自定义异常做统一的异常处理,例如如果是用户发出取消操作指令,当前调用链则抛出一个用户取消异常,然后由统一异常处理捕获,先判断他是不是继承自BaseError,如果是则再根据事先定义好的处理方案处理. 为啥说这只是理想的设计方案呢?因为es5根本就没有提供js的继

javascript组合继承

javascript继承有几种继承方式,现在来说说其中的组合继承. 组合继承是结合了原型链和借用构造函数这两种技术的继承方式,分别利用它们的长处,避免了短处.那就先说说这两种技术吧. 原型链  原型链就是实例与原型之间的链条. 子类型构造函数   与  超类型构造函数  之间没有关联,只需将   子类型构造函数的原型  作为  超类型构造函数的实例.这样,子类型构造函数的实例   就可以共享    超类型构造函数原型的方法  以及  超类型构造函数的属性. 如: var subType.prot

对象冒充实现继承,原型链继承方法,以及组合继承模式

function Person (){ this.name=“张三”; this.run = function(){ alert( this.name+'在运动' ) } } Person.prototype.work = function(){ alert( this.name+'在工作’ ) } // web类 继承person类 原型链+对象冒充的组合继承模式 function web(){ Person.call( this )  //  对象冒充实现继承 } var w = new w

JavaScript继承基础讲解,原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承

说好的讲解JavaScript继承,可是迟迟到现在讲解.废话不多说,直接进入正题. 既然你想了解继承,证明你对JavaScript面向对象已经有一定的了解,如还有什么不理解的可以参考<面向对象JS基础讲解,工厂模式.构造函数模式.原型模式.混合模式.动态原型模式>,接下来讲一般通过那些方法完成JavaScript的继承. 原型链 JavaScript中实现继承最简单的方式就是使用原型链,将子类型的原型指向父类型的实例即可,即“子类型.prototype = new 父类型();”,实现方法如下