在多数语言中继承都很重要。JavaScript是一个基于原型的语言,这意味着对象可以直接从其他对象继承。以下列出几种常见的js继承方式。

  1. 原型链继承

    function Father(){
    this.status = true;
    }
    Father.prototype.getSuper = function(){
    return this.status;
    };
    function Son(){
    this.substatus = false;
    }
    //继承了 SuperType
    Son.prototype = new Father();
    Son.prototype.getSub = function (){
    return this.substatus;
    };
    var instance = new Son();
    alert(instance.getSuper()); //true
  2. 借用构造函数继承
    function Father(){
    this.colors = [1,2,3];
    }
    function Son(){
    //继承了 Father
    Father.call(this);
    }
    var instance1 = new Son();
    instance1.colors.push(4);
    alert(instance1.colors); //"1,2,3,4"
    var instance2 = new Son();
    alert(instance2.colors); //"1,2,3"
  3. 组合继承
    function Father(name){
    this.name = name;
    }
    Father.prototype.sayName = function(){
    alert(this.name);
    };
    function Son(name, age){
    //继承属性
    SuperType.call(this, name);
    this.age = age;
    } Son.prototype = new Father(); //将子类的原型指向父类
    Son.prototype.constructor = Son; //将子类的constructor指向自己
    Son.prototype.sayAge = function(){
    alert(this.age);
    };
    var instance = new Son("lh", 19);
    instance1.sayName(); //"lh";
    instance1.sayAge(); //19
  4. 原型式继承
    function object(o){
    function F(){}
    F.prototype = o;
    return new F();
    }
    var person = {
    name: "lh",
    loves: ["a", "b", "c"]
    };
    var anotherPerson = object(person);
    anotherPerson.name = "Greg";
    anotherPerson.friends.push("d");
    alert(person.loves); //"a,b,c,d"

    这里的object方法和Object.create()方法类似。

  5. 寄生式继承
    function object(o){
    function F(){}
    F.prototype = o;
    return new F();
    }
    function createAnother(obj){
    var clone = object(obj); //通过调用函数创建一个新对象
    clone.say = function(){ //给这个对象添加方法
    alert("hi");
    };
    return clone; //返回这个对象
    }
    var person = {
    name: "lh",
    loves: ["a", "b", "c"]
    };
    var anotherPerson = createAnother(person);
    anotherPerson.say(); //"hi"
  6. 寄生组合式继承
    function inheritPrototype(son, father){
    var prototype = Object.create(father.prototype);
    son.prototype = prototype;
      prototype.constructor = son;
    }
    function Father(name){
    this.name = name;
    }
    Father.prototype.sayName = function(){
    alert(this.name);
    };
    function Son(name, age){
    Father.call(this, name);
    this.age = age;
    }
    inheritPrototype(Son, Father);
  7. 使用es6实现
    class Father{
    constructor(x, y) {
    this.x = x;
    this.y = y;
    }
    }
    class son extends Father{
    constructor(x, y, age) {
    super(x, y); // 调用父类的constructor(x, y)
    this.age= age;
    }
    toString() {
    return this.color + ' ' + super.toString(); // 调用父类的toString()
    }
    }
    子类继承父类中constructor中必须先调用super()方法才能访问this,否则会报错。

原生js实现继承的更多相关文章

  1. koa 基础(十七)原生 JS 中的类、静态方法、继承

    1.app.js /** * 原生 JS 中的类.静态方法.继承 * es5中的类和静态方法 */ function Person(name, age) { // 构造函数里面的方法和属性 this. ...

  2. 用原生JS读写CSS样式的方法总结

    为了日后方便查询,本人翻阅了一些资料总结了以下方法,仅限原生JS,如有不对的地方欢迎指出!只求大家看完觉得有学到点什么就OK了!   一.可以通过DOM节点对象的style对象(即CSSStyleDe ...

  3. 框架操作DOM和原生js操作DOM比较

    问题引出 对于Angular和React操作DOM的速度,和原生js操作DOM的速度进行了一个比较: 一个同学做的demo 代码如下: <!DOCTYPE html> <html n ...

  4. 原生js dom记忆的内容

    1.DOM基础getElementByIdgetElementByTagNamegetElementByName getElementsByClass querySelector querySelec ...

  5. 原生JS面向对象思想封装轮播图组件

    原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能 ...

  6. 原生js+css实现重力模拟弹跳系统的登录页面

    今天小颖把之前保存的js特效视频看了一遍,跟着视频敲了敲嘻嘻,用原生js实现一个炫酷的登录页面.怎么个炫酷法呢,看看下面的图片大家就知道啦. 效果图: 不过在看代码之前呢,大家先和小颖看看css中的o ...

  7. 原生Js操作DOM

    查找DOM .querySelectorAll(),它接受包含一个CSS选择器的字符串参数,返回一个表示文档中匹配选择器的所有元素的NodeList元素. .querySelector(),返回第一个 ...

  8. 原生JS插件(超详细)

    作为一个前端er,如果不会写一个小插件,都不好意思说自己是混前端界的.写还不能依赖jquery之类的工具库,否则装得不够高端.那么,如何才能装起来让自己看起来逼格更高呢?当然是利用js纯原生的写法啦. ...

  9. 原生js实现vue组件功能

    在如今VUE盛行的情况下,我们一直在惊叹于VUE的组件的功能,却不知道,原生js早就已经支持了这个功能. 最近在公开课学到的,js还有很多很多需要探索学习. 下面是一个简单的例子 <!DOCTY ...

随机推荐

  1. day4new-转自金角大王

    Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...

  2. Python内存机制简介

    1: 变量不是盒子,应该把变量视作便利贴.变量只不过是标注,所以无法阻止为对象贴上多个标注.标注就是别名: >>> a = [1, 2, 3] >>> b = a ...

  3. 17个你必须牢记的Win10快捷键

    电脑初学者掌握了盲打技术,可以提高录入速度:游戏玩家掌握了快捷键,可以在瞬息百变的对战中提高生存的机会:而Windows玩家掌握了快捷键,不但可以提高电脑操作速度,更能享受到初级玩家望着你那仰慕的眼神 ...

  4. 【错误收集】SVN冲突解决 标签: 错误收集 2016-03-13 08:44 624人阅读 评论(24) 收藏

    最近在倒代码,这真的是一件挺低效率的事情的,但是为了之后工作的进行,必须把这些已经做好的界面,做好的功能搬到新的框架上来,所以安排了10来个同学一起倒代码,因为大家共用一个解决方案,所以使用svn来进 ...

  5. windows7蓝屏0x000000c4

    故障还原: 360更新弹出更新提示,于是选择了关机自动更新,第二天开机发现电脑蓝屏报0x000000c4错误! 故障排查: 1.无法从最后一次正确配置启动windows7 2.无法进入安全模式 该错误 ...

  6. 三角形数且是完全平方数 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 E.Half-consecutive Numbers

    三角形数:an=n*(n+1)/2; 完全平方数:bn=c^2; 既是三角形数又是完全平方数:An=6*A(n-1)-A(n-2)+2; A[23]={ 0, 1, 8, 49, 288, 1681, ...

  7. python 类与类之间的关系. 特殊成员

    一.类与类之间的关系 1.依赖关系 在方法的参数位置把另一个类的对象作为参数进行传递 class Person: def play(self, tools): # 通过参数的传递把另一个类的对象传递进 ...

  8. cocos2d-x游戏开发(十五)游戏载入动画loading界面

    这个资源载入的loading界面demo是在玩客网做逆转三国的时候随手写的,尽管我在那仅仅待了2个礼拜.可是也算參与了一个商业游戏项目了,学到不少东西.当时使用的cocos2d-x还是1.0版的,我用 ...

  9. Python基础:13装饰器

    装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的应用有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同 ...

  10. Vue.js 第4章 组件与路由

    组件 什么是组件:组件就是一些标签结构的封装,同时为这些结构添加需要的业务逻辑,设置你想要的样式 一个组件中一般可以设置:结构,功能和样式 为什么要使用组件: 使用方便 复用 组件的创建和使用 组件的 ...