继承的三种方式

1、原型继承 (既继承了父类的构造器模板,又继承了父类的原型)

    // 原型继承
    // 既 继承了 构造器 ,又继承了 原型
    function Person(name,age) {
        this.name = name;
        this.age = age;
    }
    Person.prototype.id = 10;

    function Human(sex) {
        this.sex = sex;
    }
    Human.prototype = new Person("z3");
    var b1 = new Human("男");
    alert(b1.name);         // z3        // 父类构造器里的属性
    alert(b1.id);           // 10        // 父类原型里的属性

2、类继承(只继承父类的构造器模板,不继承父类的原型)

    // 类继承
    // 只继承模板,不继承原型
    function Person1(name,age) {
        this.name = name;
        this.age = age;
    }
    Person1.prototype.id = 6;

    function Human1(sex,name,age) {
       this.sex = sex;
       Person1.call(this,name,age);
    }
    var b2 = new Human1("女",‘ls‘,15);
    alert(b2.name)                  // ls                // 父类构造器里的属性
    alert(b2.sex);                  // 女                // 子类构造器里的属性
    alert(b2.id)                    // undefined         // 父类原型里的属性    未被继承

3、混合继承 (既继承了父类的构造器模板,又继承了父类的原型)

    //  混合继承  继承模板 + 原型
    function Person2(name,age) {
        this.name = name;
        this.age = age;
    }
    Person2.prototype.id = 8;
    Person2.prototype.sayName = function () {
        alert(this.name);
    }

    function Human2(sex,name,age) {
        this.sex = sex;
        Person2.call(this,name,age)
    }

    // 因为 在实例化父类模板的时候,并没有传参数,因此没有实例化 模板里的属性
    // 只继承了 父类的实例 的原型对象  因此并没有继承模板,只继承了原型
    Human2.prototype = new Person2();
    var b3 = new Human2("女","z5",22);
    b3.sayName();                       // z5
时间: 2024-11-10 14:33:27

继承的三种方式的相关文章

实现JavaScript中继承的三种方式

一.原型链继承  在原型链继承方面,JavaScript与java.c#等语言类似,仅允许单父类继承.prototype继承的基本方式如下: 代码如下: function Parent(){} function Child(){} Child.prototype = new Parent(); 通过对象Child的prototype属性指向父对象Parent的实例,使Child对象实例能通过原型链访问到父对象构造所定义的属性.方法等.  构造通过原型链链接了父级对象,是否就意味着完成了对象的继承

javascript实现继承的三种方式

一.原型链继承  function Parent(){} function Child(){} Child.prototype = new Parent(); 通过对象child的prototype属性指向父对象parent的实例,使child对象的实例通过原型链访问到父对象构造所定义的属性.方法等. 二.使用apply.call方法 js中call和apply都可以实现继承,唯一的一点参数不同,func.call(func1,var1,var2,var3)对应的apply写法为:func.ap

js中原型继承的三种方式

Java中 实现多线程成的三种方式(继承,实现,匿名内部类)

------------------------------------------------------------------------------------------------------------ /** 第一种方式:继承Thread类 *             1. 定义一个类,然后让该类继承Thread类 *             2. 重写run方法 *             3. 创建定义的这个类的对象 *             4. 启动线程 */ //继承

继承关系中的第三种方式:利用<union-subclass>(补充)

继承关系中的第三种方式:利用<union-subclass>   代码:   映射文件(其他的代码和其他继承关系相同)   Person.hbm.xml   <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/

【Struts2】Struts2获取session的三种方式

1.Map<String,Object> map =  ActionContext.getContext().getSession(); 2.HttpSession session = ServletActionContext.getRequest().getSession(); 3.让Action实现SessionAware接口,并实现public void setSession(Map<String, Object> session) {} 方法,Struts2会在实例化Act

【整理】Linux下中文检索引擎coreseek4安装,以及PHP使用sphinx的三种方式(sphinxapi,sphinx的php扩展,SphinxSe作为mysql存储引擎)

一,软件准备 coreseek4.1 (包含coreseek测试版和mmseg最新版本,以及测试数据包[内置中文分词与搜索.单字切分.mysql数据源.python数据源.RT实时索引等测试配置]) Mysql源码包 (必须选择与你已安装mysql的版本一致) 为了避免安装中出现依赖包缺失,你需要打一句鸡血: yum install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel exp

java创建线程的三种方式及其对比

Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实例,即创建了线程对象. (3)调用线程对象的start()方法来启动该线程. package com.thread; public class FirstThreadTest extends Thread{ int i = 0; //重写run方法,run方法的方

实现servlet的三种方式

实现servlet的三种方式 01,实现servlet接口 02,继承GenericServlet 03,继承HttpServlet 常用的 注:Httpservlet=====extends====>GenericServlet=====implements====>Servlet接口