- instanceof
- 是检查一个对象的原型链上是否有对应构造函数的prototype属性
- 下面实现一个简单的instanceof实现
function myInstanceOf(obj,constructor){ // 获取对象的直接原型 等价于obj.__proto__ let proto = Object.getPrototypeOf(obj); while(proto !== null){ if(proto == constructor.prototype){ return true; } proto = Object.getPrototypeOf(proto); } return false; } function myFn() {} const obj = new myFn(); console.log(myInstanceOf(obj, myFn)); // true console.log(myInstanceOf(obj, Array)); // false
- 下面实现一个简单的instanceof实现
- 是检查一个对象的原型链上是否有对应构造函数的prototype属性
- constructor
- 每个对象都有一个
constructor属性,指向创建该对象的构造函数。- 直接访问对象的构造函数。
- 不会查找整个原型链,仅检查当前对象或其直接原型上的
constructor。 - 容易被篡改,不够稳定。
function Person() {} const p = new Person(); console.log(p.constructor === Person); // true p.constructor = String; console.log(p.constructor === Person); // false (⚠️ 被修改后失效) - 在原型链中,如果对象自身没有
constructor,就会从原型中继承:function Animal() {} function Dog() {} Dog.prototype = Object.create(Animal.prototype); const dog = new Dog(); console.log(dog.constructor === Animal); // true(⚠️ 不符合预期)
- 每个对象都有一个