2.原型和原型链的关系以及查找顺序

原型:

  • 当创建一个函数的时候,函数自身会有一些属性的方法,其中有一个属性叫 prototype,它就是原型。
  • 只要是函数(非箭头函数)都有原型
  • 原型是解决性能问题的。
  • 构造函数的原型,只有它的实例化对象可以使用。

对象、类、函数:

  • 对象: JS 中,万物皆对象
  • 类:定义一个类class Person {}。子类使用 extends 来继承class Child extends Person {},使用 New 来创建实例let example = new Child
  • 构造函数:定义一个构造函数function Person() {}。一个函数可以用 prototype 来继承另一个函数,详情看 继承 。使用 New 运算符来创建实例let example = new Child
  • 函数的三个角色:1. 函数 2. 对象 3. 类

JS 中构造函数和普通函数的区别

查找一个对象下,某个属性的过程:

  1. 实例化对象上没有。还会(通过自身的原型链)找到构造函数的原型。
  2. 如果还没有,会(通过构造函数的原型链)找到Object的原型为止。
  3. 再没有就是(undefined),函数(报错)。

注意:永远三步走,自身 -> 构造函数的原型 -> Object的原型

实例化对象的原型链 === 构造函数的原型

    function fn() {
      //a = 2;
      //this.a = 1//原型中的this给它的实例用。return的默认返回值是this
    }
    let f = new fn;
    Function.prototype.a = 3;
    Object.prototype.a = 4;
    console.log(f.a);//4  
    //f 自身没有 a 通过原型链(__proto__)找到构造函数 fn 的原型(prototype),
    //fn 也没有变量 a, 通过原型链找到 Object 的原型,Object 的原型上的 a=4
    //(第三步的时候一定会找到 Object 的原型)
    console.log(fn.a);//3
posted @ 2018-10-31 14:19  真的想不出来  阅读(809)  评论(0编辑  收藏  举报