js原型链

1、自定义函数与 Function的关系:

    ①本地对象:独立于宿主环境(浏览器)的对象——包括Object、Array、Date、RegExp、Function、Error、Number、String、Boolean

        ②内置对象——包括Math、Global(window,在js中就是全局变量),使用的时候不需要new

       ③宿主对象——包括自定义对象、DOM、BOM

     故所有的函数都是 Function 的实例;

2、构造函数、原型和实例的关系:

    ①在构造函数上都有一个原型属性 prototype,该属性也是一个对象;

    ②原型对象上有一个 constructor 属性,该属性指向的就是构造函数;

           ③实例对象上有一个 _proto_  属性,该属性也指向原型对象,并且该属性不是标准属性,不可以用在编程中,该属性用于浏览器内部使用。

3、prototype与_proto_的关系:

    prototype是构造函数的属性,_proto_是实例对象的属性,这两者都指向同一个对象

4、函数与对象:

    对象的本质:无序的键值对集合;键值对当中的值可以是任意数据类型的值;

    对象就是一个容器,这个容器当中放的是(属性和方法)

    故函数也是对象,对象不一定是函数;

5、属性搜索 

    ①在访问对象的某个成员的时候会先在对象中找是否存在

      ②如果当前对象中没有就在构造函数的原型对象中找

      ③如果原型对象中没有找到就到原型对象的原型上找

      ④知道Object的原型对象的原型是null为止

6、试一试   

    function Foo(){
      getName=function(){
        alert(1);
      };
      return this;
    }

   Foo.getName =function(){
     alert(2);
   }
   Foo.prototype.getName=function(){
     alert(3);
   }
  var getName=function(){
    alert(4);
  }
  function getName(){
    alert(5);
  }
打印:
  Foo.getName();
  getName();
  Foo().getName();
  getName();
  new Foo.getName();
  new Foo().getName();
  new new Foo().getName();

原文地址:https://www.cnblogs.com/dalizi/p/6931978.html