zoukankan      html  css  js  c++  java
  • 原型和原型链

    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本身。

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




  • 相关阅读:
    170110-学习MoveIt!
    12.29-ros-gazebo高级
    12.27-ros-gazebo基础
    4.9-Simulation in gazebo or webots
    6.28-机器人模拟器Gazebo基础
    4.8-URDF in ROS
    Win32双缓冲画图原理
    Win32 计时器
    最简化的DirectX 11开发环境的配置 VS2010
    VS2010 C++编译报错LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  • 原文地址:https://www.cnblogs.com/xuniannian/p/7453135.html
Copyright © 2011-2022 走看看