在JavaScript中,new
和instanceof
都是面向对象编程的关键词,它们的内部机制如下:
-
new
关键字:当使用new
操作符时,会创建一个新的对象,然后将该对象赋值给一个变量。在构造函数内部,this
关键字指向新创建的对象。接下来,构造函数会执行,并对这个新创建的对象进行初始化,然后返回该对象。其实就是以下几个步骤:- 创建一个新对象
- 将构造函数的原型属性赋值给该对象的__proto__属性
- 将新对象作为this的上下文对象来调用构造函数
- 如果构造函数返回了一个对象,则以该对象为最终结果;否则,返回新对象。
那么,一个使用
new
关键字的代码示例可以这样写:function Person(name, age) { this.name = name; this.age = age; } var person = new Person('Tom', 30);
-
instanceof
关键字:用于检测某个对象是否是指定对象的实例。其实现机制是判断该对象是否为指定构造函数的实例,如果是,返回true
,否则返回false
。其实就是检测对象的原型链中是否存在指定构造函数的原型。操作流程:- 首先获取该对象的原型链
- 遍历该原型链,直到找到与指定构造函数的原型对象相等的对象
- 如果找到了该指定构造函数对应的原型对象,返回
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