原型链:对象沿着__proto__查找

  <script>
    function x() {

    }

    //为函数x的prototype原型对象添加add方法
    x.prototype.add = function (a) {
      return a
    }

    var xxx = new x()
    console.log(xxx.add);//函数add   
    console.log(x.add);//undefined 
    //x的prototype拥有add,x的__proto__没有add;结果:x访问不到函数add
    //xxx的prototype没有add,xxx的__proto__指向 x的prototype:里面拥有add;结果:x可以访问到函数add
    //可以看出原型链的访问顺序是通过对象(实例对象或者函数对象)的__proto__属性往上查找的,和函数自身的prototype无关,
    //函数无法访问到定义在自己prototype中的方法(但可以访问prototype里面的__proto__)

    console.log(x.constructor);//Function函数 
    // x的__proto__指向的Function的prototype中的constructor(只会沿着__proto__去寻找constructor)
    console.log(x.prototype.constructor);//x函数
    // x的prototype中的constructor


    //函数无法访问到定义在自己prototype中的方法(但可以访问prototype里面的__proto__);
    //当对象(包括函数对象)自身寻找不到属性或者方法时就会沿着自己的__proto__一层一层去寻找
    //比如fn沿着__proto__在Function的prototype中找不到,就会继续在Function的prototype沿着__proto__
    //访问Object的prototype;然而Object的prototype再沿着__proto__寻找就是null

  </script>
原文地址:https://www.cnblogs.com/xjt31/p/14001920.html