美文网首页
原型链概述

原型链概述

作者: 禺沫 | 来源:发表于2018-06-28 18:33 被阅读0次

    JS原型链用来解决JS中继承关系,目前理解肤浅,实觉强制模仿面向对象,有许多不合理之处。

    构造函数的继承:

    function A(){}

    A.prototype.name = "lilei";

    function B() {}

    让B继承A,写法:B.prototype = A.prototype;

    tips:

    A.prototype.name = "lilei"; 此种写法属性可被继承。

    引发问题:1.B中更改prototype属性,A中跟着更改;

                   2.如果A中有属性,如下:

                        function A(){

    this.age = "20";

                         }

                       age则不会被继承,因为age方法在实例时候创建,原型中并没有。

    如若想要让实例中属性被继承,则可写成

    B.prototype = new A(); 

    B.protptype.constructor = B;需要手动把B的构造函数指回来,但此种写法有多次创建A对象的弊端。

    另外,有拷贝继承方式,取A中每个属性,赋值给B,无封装性可言。

    非构造函数的继承:

    除函数对象外,普通对象并没有prototype可用,没有条件创造条件使用prototype,new 一个function,其中的prototype设置为父类对象返回,此时再设置子类对象的属性。

    普通对象有__proto__属性,但不能用__proto__方法代替prototype,因为__proto__用于指向创建它的构造函数的原型对象。

    比如普通对象C,它的构造函数原型对象就为Object的prototype,则知,__proto__属性不能随意更改。

    参考:

    http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html

    http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance_continued.html

    https://www.jianshu.com/p/dee9f8b14771

    https://www.jianshu.com/p/652991a67186

    相关文章

      网友评论

          本文标题:原型链概述

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