如何通过代码演示JavaScript中的new和instanceof?

17 min read

在JavaScript中,newinstanceof都是面向对象编程的关键词,它们的内部机制如下:

  1. new关键字:当使用new操作符时,会创建一个新的对象,然后将该对象赋值给一个变量。在构造函数内部,this关键字指向新创建的对象。接下来,构造函数会执行,并对这个新创建的对象进行初始化,然后返回该对象。其实就是以下几个步骤:

    1. 创建一个新对象
    2. 将构造函数的原型属性赋值给该对象的__proto__属性
    3. 将新对象作为this的上下文对象来调用构造函数
    4. 如果构造函数返回了一个对象,则以该对象为最终结果;否则,返回新对象。

    那么,一个使用new关键字的代码示例可以这样写:

    function Person(name, age) { 
      this.name = name;
      this.age = age;
    }
    
    var person = new Person('Tom', 30);
    
  2. instanceof关键字:用于检测某个对象是否是指定对象的实例。其实现机制是判断该对象是否为指定构造函数的实例,如果是,返回 true,否则返回false。其实就是检测对象的原型链中是否存在指定构造函数的原型。操作流程:

    1. 首先获取该对象的原型链
    2. 遍历该原型链,直到找到与指定构造函数的原型对象相等的对象
    3. 如果找到了该指定构造函数对应的原型对象,返回 true,否则返回 false

    下面是一个使用instanceof关键字的代码示例:

    function Person(name, age) { 
      this.name = name;
      this.age = age;
    }
    
    var person = new Person('Tom', 30);
    
    console.log(person instanceof Person); // true
    console.log(person instanceof Object); // true,因为所有对象都是Object的实例
    console.log(person instanceof Array); // false