zoukankan      html  css  js  c++  java
  • JS继承 小白文

    继承我的理解是 一个对象 能够使用另一个对象的方法和属性

    继承需要一个父类构造函数

    一、通过原型链继承

    通过 创建一个 Person 的实例对象,该对象身上 不仅有 name 和 age 等方法, 也可以访问到原型链上的属性和方法

    缺点是 继承的子类共用一个原型,当遇到 引用类型时, 互相影响

    二、通过构造函数继承

    1、首先肯定需要通过 new Son() 来触发Person.call(this)

    2、new Son()时 创建了一个 新对象,修正该新对象的__proto__属性和constructor属性

    3、在新对象内部创建一个属性指向this,也就是Son,如 child.fn = Son 方法,然后指向该方法,相当于在新对象child内部执行一次Son,执行完后删除该属性fn,这就是new的执行过程

    4、Person.call 执行过程: 同样的,相当于在Son内部执行一次Person,通过this改变指向,this指向的就是新对象child

    5、所以新对象有 name = ‘xiaobai’,age = ‘20’ 这两个属性

    缺点:无法访问Person原型对象上的属性

     三、组合继承(一和二合并)

    该方法既可以获得 实例属性,也可以访问Person原型链上的方法

    但是在Person.call 和 new Person时获取了两份一样的实例属性,比较浪费

     四、寄生组合式继承

    该方式主要是通过 共享原型 的方式来实现继承,但是有一个问题,就是 子类不能 随意添加属性和方法

    这就需要通过一个中间人来解决,通过Object.create 创造出来的对象,这个对象的原型对象 指向传入的参数

    下面有Object.create的原理

     

    小白一个,欢迎指正

  • 相关阅读:
    jsp转向
    什么是 XDoclet?
    tomcat中的几点配置说明
    mysql5问题
    POJ 3734 Blocks
    POJ 2409 Let it Bead
    HDU 1171 Big Event in HDU
    POJ 3046 Ant Counting
    HDU 2082 找单词
    POJ 1286 Necklace of Beads
  • 原文地址:https://www.cnblogs.com/vnwith/p/12537055.html
Copyright © 2011-2022 走看看