• 原型和原型链


    var a = {} 其实是 var a = new Object() 的语法糖

    var a = [] 其实是 var a = new Array() 的语法糖

    function Foo(){...}其实是 var Foo = new Function(){...}的语法糖

    5条原型规则

    1. 所有的引用类型(对象、数组、函数)都有对象特性,可自由扩展属性(null除外)

    2.所有的引用类型(对象、数组、函数)都有一个__proto__属性,属性值是一个普通的对象

    3.所有的函数都有一个prototype属性,属性值是一个普通的对象

    4.所有的引用类型(对象、数组、函数),__proto__属性值指向它的构造函数的prototype属性值

    5。当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去它的__proto__(即它构造函数的prototype中寻找)

    每个函数 都有一个prototype属性,当一个函数被用作构造函数来创建实例时,这个函数的prototype属性值会被作为原型赋值给所有对象实例

    new 创建对象的过程

    1.创建一个新对象

    2. this指向这个新对象

    3. 执行代码,即对this赋值

    4. 返回this

    function aa(){

      a.prototype.name="Micheal";

      a.prototype.showNmae=function(){

        console.log(this.name);

      }

    }

    function AA(){

      A.prototype.age=15;

      A.prototype.showAge=function(){

        console.log(this.age);

      }

    }

    //AA继承aa

    AA.prototype = new aa();

    var BB = new AA();

    console.log(BB);

    console.log(BB.showName());  //Micheal

    大致流程就是通过AA.prototype=new aa();使得AA.prototype(原型对象)下的__prototype__指向aa.prototype,当创建引用类型AA的实例化对象BB时,BB内部会产生一个__proto__属性指向AA的对象原型,再通过AA原型对象中的__proto__指向aa的原型对象,从而实现实例对象BB对aa的继承,整个链向:BB的__proto__-->AA.prototype-->aa.prototype,这就是一条原型链,如果再继续延伸的话,aa的原型对象下的__proto__属性会指向Function本身。

    本人正在不断地学习和摸索中,如有错误,欢迎指正!




  • 相关阅读:
    EventBus详解
    Java BigDecimal使用
    StringFormate使用
    Sourcetree拉取推送问题
    Android下拉刷新控件android-Ultra-Pull-To-Refresh 使用
    SourceTree跳过Atlassian账号,免登陆,跳过初始设置
    Android Studio3.2新建项目gradle read time out
    底部导航栏使用BottomNavigationBar
    PopupWindow封装
    电脑连接真机,但是androidstudio不显示手机,ADB Interface黄色感叹号
  • 原文地址:https://www.cnblogs.com/xuniannian/p/7453135.html
Copyright © 2020-2023  润新知