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的原理

     

    小白一个,欢迎指正

  • 相关阅读:
    Mac OS X从10.7升级到Mountain Lion OS X10.8
    IOS UIView,UIViewController
    ObjectiveC Content list
    Sharepoint 系统管理
    iOS UIViewController use
    WIN10关机常用的三种方法
    svn check build
    ubuntu下搭建android开发环境
    BitmapFactory.Options避免 内存溢出 OutOfMemoryError的优化方法
    ubuntu update source with proxy
  • 原文地址:https://www.cnblogs.com/vnwith/p/12537055.html
Copyright © 2011-2022 走看看