instanceof 实现代码
时间: 2023-07-07 18:25:11 浏览: 68
以下是 instanceof 的实现代码:
```javascript
function myInstanceof(obj, constructor) {
let proto = Object.getPrototypeOf(obj);
while (proto) {
if (proto === constructor.prototype) {
return true;
}
proto = Object.getPrototypeOf(proto);
}
return false;
}
```
使用方法如下:
```javascript
function Person() {}
const person = new Person();
console.log(myInstanceof(person, Person)); // true
console.log(myInstanceof(person, Object)); // true
console.log(myInstanceof(person, Array)); // false
```
相关问题
instanceof实现原理
在 JavaScript 中,instanceof 运算符用于检查一个对象是否是一个类的实例,或者是其子类的实例。它的使用方法为 `对象 instanceof 构造函数`。当 `对象` 是 `构造函数` 的实例时返回 true,否则返回 false。
instanceof 实现原理是通过比较 `对象` 的原型链中是否存在 `构造函数` 的原型,如果存在,则返回 true。换句话说,instanceof 判断一个对象是否是某个构造函数的实例,是基于原型链的方法。
实现原理示例代码如下所示:[^1]
```javascript
function myInstanceOf(obj, Constructor) {
let proto = obj.__proto__;
let prototype = Constructor.prototype;
while (true) {
if (proto === null) {
return false;
}
if (proto === prototype) {
return true;
}
proto = proto.__proto__;
}
}
let obj = new Object();
console.log(myInstanceOf(obj, Object)); // true
```
实现instanceof函数
要实现一个类似于`instanceof`函数的功能,可以参考以下步骤:
1. 首先,获取构造函数的显式原型(`right.prototype`)。
2. 然后,获取对象的隐式原型(`left.__proto__`)。
3. 接下来,使用一个循环判断对象的隐式原型是否等于构造函数的显式原型。如果相等,则返回`true`,表示对象是构造函数的实例;如果隐式原型为`null`,则返回`false`,表示对象不是构造函数的实例;如果隐式原型与构造函数的显式原型不相等,则将隐式原型更新为其自身的隐式原型,继续循环判断。
4. 最后,测试函数的实现是否正确,可以尝试使用类似于`console.log(myInstanceof(a, RegExp))`的方式进行验证。
总结起来,实现`instanceof`函数的主要思路是通过比较对象的隐式原型和构造函数的显式原型,来判断对象是否是构造函数的实例。
需要注意的是,以上实现思路是基于JavaScript的内部机制,即通过比较隐式原型是否相等来判断对象的类型。因此,在实际应用中,可以使用该函数来进行类型判断。
参考资料:
- 实现instanceof运算符的示例代码
- 众所周知,在JavaScript中,检测一个变量的类型,无疑有以下三种方法。当然,本文会略过前两种,重点讲述instanceof的实现原理和手写instanceof的实现。
- instanceof 运算符用于测试构造函数的 prototype 属性是否出现在对象原型链中的任何位置。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)