美文网首页
简单聊聊javascript的继承;

简单聊聊javascript的继承;

作者: 殖民_FE | 来源:发表于2017-05-09 15:10 被阅读0次

在JS中继承是一个非常复杂的话题,比其他任何面向对象语言中的继承都复杂得多。
在大多数其他面向对象语言中,继承一个类只需使用一个关键字即可。在JS中想要达到继承公用成员的目的,需要采取一系列措施。JS属于原型式继承,得益于这种灵活性,我们既可以使用标准的基于类的继承,也可以使用更微妙一些的原型式继承。在JS中应该要明确一点,一切继承都是通过prototype来进行的,且JS是基于对象来继承的。(这话是比较官方的说法,看着都很专业)

在说继承之前,首先得先回答一个问题,什么是继承?

我理解的继承,简单来说就是,
--1.在原有类的基础上,进行可操作的修改,得到一个崭新的类,这个类有原来类的功能,同时也有自己的功能;
--2.这个新的类,不会影响原有类的功能,不会相互干预;
这里肯定有人要问了,什么是‘可操作的修改呢?’说白了就是在不影响整个类的功能的前提下,进行的修改!这点和第二点略有重复,仔细想想,还是有所区别的!!!
下面开始说说常用的集中继承方式:

1.代码:

        function Person(name, sex) {
            this.name = name;
            this.sex = sex;
        }
        Person.prototype.showName = function() {
            console.log(this.name);
        }
        Person.prototype.showSex = function() {
            console.log(this.sex);
        }
        function work(name, sex, job) {
           //构造函数伪装调用父级的构造函数——为了继承属性
            Person.call(this, name, sex);
            //Person.apply(this, [name, sex]);  //此处的call与apply是有区别的,往下看
            this.job = job;
        }
        work.prototype = Person.prototype; //通过prototype继承父级的属性
        work.prototype.showJob = function() {
            console.log(this.job);
        }
        var s = new work('xue', 'nan', 'developer');
        s.showJob()  //developer

简单的解释一下上面的代码:首先写了一个很简单的构造函数,在函数的原型上分别添加了showName和showSex的方法;紧接着写了一个work()函数,这里注意work()里面的参数,多了一个job参数,这个参数就是要继承的参数, Person.call(this, name, sex);有人问这里的this指的是啥?看下图:


image.png

答案就是 <b>new出来的work对象!</b>
work.prototype = Person.prototype;这句话就是通过prototype继承父级的属性,name和sex;然后就是在work的基础上添加showJob方法;
最后就是new一个work对象,执行方法!最后work继承了Person的name和sex属性;是不是很好懂!

2.代码:

 function Person(name, sex) {
            this.name = name;
            this.sex = sex;
        }
        Person.prototype.showName = function() {
            alert(this.name);
        };
        Person.prototype.showSex = function() {
            alert(this.sex);
        };
        function work(name, sex, job) {
            Person.call(this, name, sex);
            this.job = job;
        }

        //1.原型链 通过原型来继承父级的方法
        //work.prototype=Person.prototype;

       // 2.原型链 通过原型来继承父级的方法(循环方法)
       // Person.prototype类型是object;
        for (var i in Person.prototype) {
            Worker.prototype[i] = Person.prototype[i];
        }
        Worker.prototype.showJob = function() {
            alert(this.job);
        };
        var p = new Person('xue', 'nan');
        var w = new work('xue', 'nan', 'developer');
        // p.showName();
        // p.showSex();
        // w.showName();
        // w.showSex();
        // w.showJob();

简单解释一下:work.prototype=Person.prototype;这里是通过原型链来继承父级的方法;这里肯定有人要问“什么是原型链?”后期会讲!!!

 for (var i in Person.prototype) {
       Worker.prototype[i] = Person.prototype[i];
 }

这里只是用不同方法,通过原型链来继承父级的方法,原理是一样的!

call与apply的区别

js中call和apply都可以实现继承,唯一的一点参数不同,func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3])。
说简单一点,这两函数的作用其实就是更改对象的内部指针,即改变对象的this指向的内容。这在面向对象的js编程过程中有时是很有用的。
如有错误请私信本人!

相关文章

  • 简单聊聊javascript的继承;

    在JS中继承是一个非常复杂的话题,比其他任何面向对象语言中的继承都复杂得多。在大多数其他面向对象语言中,继承一个类...

  • JavaScript - 继承和类

    JavaScript - 继承和类 在这一篇中,我要聊聊 JavaScript 中的继承和“类”。 首先跟你请教下...

  • 简单的JavaScript继承

    这篇文章翻译自John Resig(jQuery的作者)的博客,原文地址。 为了正在写的这本书(译者注:这本书是《...

  • 聊聊JavaScript如何实现继承

    “继承”是面向对象编程里面经常提及到的概念,它的目的是实现代码复用。JavaScript并没有“类”的概念,那么,...

  • JavaScript的原型继承

    说到继承,只要学过Java的肯定都知道,然而在JavaScript中出现的不是简单的继承两个字,而是原型继承,那么...

  • JavaScript继承

    一、概述  JavaScript中,继承是基于原型链的,本文简单归纳几种继承方法。以以下Animal、Cat分别为...

  • 函数的原型对象

    什么是原型? 原型是Javascript中的继承的继承,JavaScript的继承就是基于原型的继承。 函数的原型...

  • 前端面试题目(二)

    javascript对象的几种创建方式 javascript继承的6种方法 详情:[JavaScript继承方式详...

  • 一文带你彻底理解 JavaScript 原型对象

    一、什么是原型 原型是Javascript中的继承的基础,JavaScript的继承就是基于原型的继承。 1.1 ...

  • 继承的写法

    继承是什么? 现实生活中,继承是什么,大家应该都懂,不用多说。 那在 JavaScript 中,简单来说,就是一个...

网友评论

      本文标题:简单聊聊javascript的继承;

      本文链接:https://www.haomeiwen.com/subject/txobtxtx.html