JS之原型

JavaScript说:万物皆对象
    Σ( ° △ °|||)︴

主要内容如下:

  1. 原型及原型链

  2. this的调用

原型及原型链

  • prototype即为原型,指的是当前函数的原型。该属性是一个对象。

  • proto 也是原型,指的是创建该对象函数的原型。该属性是一个对象。

  • 通过new Function()创建的对象都是函数对象,其他的都是普通对象。函数对象都有prototype属性。普通对象没有prototype,但有proto属性。

  • 如果函数没有任何属性的话,prototype用作给当前函数增加属性,默认有一个constructor属性。

  • 原型链:当遇到自身没有的属性时,通过prototype路径向父级寻找,所以可以修改父级属性,因此不推荐用作修改。

this的调用

  1. 在全局作用域下面调用this,this指向global即window。

       function fn(){
         this.x = 1;
         console.log(fn.x);
       }
       fn(); // 1
    
  2. 用 new 关键词构造函数,this 指向创建的新对象。this当前的函数为对象属性的时候,this指向该对象。

       function fn(){
         this.x = 1;
       }
       var fn2 = new fn(); ////从fn方法中new复制了一份实例赋值给fn2来生成对象,fn2可继承父级
       console.log(fn2.x); // 1
    

运算符

  1. typeof 运算符:检测基本的数据类型,用于判断简单变量的类型。(number,boolean,string,undefined,object,function)

  2. instanceof 运算符:检测引用数据类型,用于判断复杂变量引用的数据类型、变量;返回boolean类型。

    语法: A instanceof B A是否引用自B

    原理:查看对象B的prototype指向的对象是否在对象A的[[prototype]]链上。如果在,则返回true,如果不在则返回false。不过有一个特殊的情况,当对象B的prototype为null将会报错(类似于空指针异常)。

    console.log(Object instanceof Object);//true 
    console.log(Function instanceof Function);//true 
    console.log(Number instanceof Number);//false
    
    console.log(arr instanceof Function);//true
    //数组和对象的关系:数组是对象的子集 对象包含数组。
    console.log(fn instanceof Object);//true
    //函数与对象的关系:所有对象都是由函数创建的 但是在instanceof检测函数又是对象。