当前位置: 首页 > news >正文

JS原型链继承

继承普通版

继承逻辑上都差不多,普通版调用方式比较繁琐,不利于反复大量的使用;


(function (){

    //创建一个人员类

    function Person(name){

        this.name = name;

   }

    //创建教师类

    function Teacher(name,books){

        //call方法可以将一个函数的对象上下文从初始化变成由this来决定;

        //调用person的构造函数,因为person没用new,所以他是个空对象;

        //相当于Java中的super函数;

        Person.call(this,name);

        this.books = books;

   }

    //使老师类继承人员类;

    Teacher.prototype = new Person();

    Teacher.prototype.constructor = Teacher;

    Teacher.prototype.getBook = function(){

            return this.name + ' ' + this.books;

       }

    //测试

    var victor = new Teacher('victor','chinese');

    alert(victor.getBook());

})()

继承升级版

(function (){
            //创建一个人员类
            function Person(name){
                this.name = name;
            }
            //创建教师类
            function Teacher(name,books){
                //call方法可以将一个函数的对象上下文从初始化变成由this来决定;
                //调用person的构造函数,因为person没用new,所以他是个空对象;
                //相当于Java中的super函数;
                Person.call(this,name);
                this.books = books;
            }
            /*创建Extend函数是为了程序中所有的继承操作*/
            function extend(subClass,superClass){
                //1.让子类的原型类属性等于父类的原型属性
                //初始化一个中间空对象,为了转换主父类关系
                var F = function(){};
                F.prototype = superClass.prototype;
                //2.让子类继承F;
                subClass.prototype = new F();
                subClass.prototype.constructor = subClass;
                //3.为子类增加属性superClass
                subClass.superClass = superClass.prototype;
                //4.增加一个保险,就算是原型类的超类(object)那么也要把你的构造函数级别降下来
                if ( superClass.prototype.constructor == Object.prototype.constructor ) {//Object为超类,首字母需要大写
                    superClass.prototype.constructor = superClass;
                }
            }

            //测试
            function Author(name,books){
                Author.superClass.constructor.call(this,name);
                this.books = books;
                this.getBook = function(){
                    return this.name + ',' + this.books;
                }
            }

            //继承
            extend(Author,Person);
            var victor = new Author('victor','javascript');
            alert(victor.getBook());

    })()

转载于:https://www.cnblogs.com/victor5230/p/6588591.html

相关文章:

  • 工程之殇
  • 2018第2周日
  • 自我介绍
  • 小程序完整对接 pingpp支付
  • 解决IntelliJ IDEA无法读取配置文件的问题
  • JAVA多线程之wait/notify
  • 出现次数最多的k个数 Top K Frequent Words
  • 异步拷贝文件
  • 用lua实现ByteArray和ByteArrayVarint
  • 作业2
  • 缓冲区溢出漏洞(2)
  • Visual Studio VS如何重置所有设置
  • Twirp:一个很酷的基于Go的新RPC框架
  • Nginx+Tomcat搭建高性能负载均衡集群
  • 我的第一篇博客
  • Codepen 每日精选(2018-3-25)
  • Elasticsearch 参考指南(升级前重新索引)
  • javascript数组去重/查找/插入/删除
  • js中的正则表达式入门
  • Linux CTF 逆向入门
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • magento 货币换算
  • mongodb--安装和初步使用教程
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • PHP CLI应用的调试原理
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Spark RDD学习: aggregate函数
  • vue--为什么data属性必须是一个函数
  • 服务器从安装到部署全过程(二)
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 微服务核心架构梳理
  • 新手搭建网站的主要流程
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 白色的风信子
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (ZT)薛涌:谈贫说富
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (四)JPA - JQPL 实现增删改查
  • (转)Scala的“=”符号简介
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (转载)Linux 多线程条件变量同步
  • ***检测工具之RKHunter AIDE
  • .NET CLR基本术语
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .net Signalr 使用笔记
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth