ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaScript之四大继承方法

2022-03-30 12:35:27  阅读:178  来源: 互联网

标签:function name 继承 JavaScript Father Son 四大 原型 prototype


  一、传统形式  -->原型链

  缺点:像下面这个案例,如果我只是需要lastName这个属性,那么还会继承到name这个属性,浪费空间。

1       Grand.prototype.lastName = "Y";
2         function Grand(){};
3         Father.prototype = Grand;
4         function Father(){
5             this.name = 'Father';
6         };
7         Son.prototype = Father;
8         function Son(){};
9         let son   = new Son();
View Code

  二:借用构造函数

  缺点:借用别人的构造函数对象,但是原型还是使用我们自己的,等于只是调用了它的方法,视觉上虽然省了代码,但是该执行还是得执行。

 1       function Person(name,sex,age){
 2             this.name = name
 3             this.sex = sex;
 4             this.age = age;
 5         }
 6         function Student(name,sex,age,grade){
 7             Person.call(this,name,sex,grade);
 8             /*
 9                 相当于
10                 this.name = name;
11                 this.sex  = sex;
12                 this.age  = age;
13             */
14 
15             this.grade = grade;
16         }
View Code

  三、共享原型

  缺点:如果其中一个修改了原型,那么另外一个也会受到干扰。

        Father.prototype.lastName = "Y";
        function Father(){};
        function Son(){};
        Son.prototype = Father.prototype;

        //若执行下面这一条,那么Father.prototype.lastName 也会相应发生改变
        Son.prototype.lastName = 'Son';
 
View Code

  四:圣杯模式

  

  function inherit(Target,Orgin){
            
            function F(){};
            F.prototype = Orgin.prototype;
            Target.prototype = Orgin.prototype;
            Target.prototype.constructor = Target;
            Target.prototype.uber = Orgin.prototype;//uber相当于supre,利用这个查询最终继承谁

        }


        
        Father.prototype.lastName = 'Y';
        function Father(){};
        function Son(){};
View Code

  五:总结

  传统继承形式:原型链,会过多继承没用的属性,浪费空间。

  借用构造函数:不能继承借用构造函数的原型,每次创建一个对象都要多执行一次

  共享性☆☆☆☆☆☆:不能随便更改自己的原型,否则会影响继承/被继承的原型。

  圣杯模式☆☆☆☆☆☆:继承或者非继承对象修改自己的原型,不会影响另外一个的原型。

 

标签:function,name,继承,JavaScript,Father,Son,四大,原型,prototype
来源: https://www.cnblogs.com/Yzengxin/p/16076405.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有