手写 instanceof
时间: 2023-07-05 11:31:22 浏览: 71
instanceof 是一个运算符,用于判断一个对象是否是某个类的实例。手写 instanceof 的实现可以通过判断对象的原型链是否包含目标类的原型来实现。具体实现代码如下:
```
function myInstanceof(obj, targetClass) {
let proto = Object.getPrototypeOf(obj);
while(proto) {
if(proto === targetClass.prototype) {
return true;
}
proto = Object.getPrototypeOf(proto);
}
return false;
}
```
使用示例:
```
class Person {}
const person = new Person();
console.log(myInstanceof(person, Person)); // true
console.log(myInstanceof(person, Object)); // true
console.log(myInstanceof(person, Array)); // false
```
相关问题
手写instanceof
可以使用原型链来手写一个简单的 instanceof,代码如下:
```
function myInstanceOf(obj, constructor) {
let proto = Object.getPrototypeOf(obj);
while (proto) {
if (proto === constructor.prototype) {
return true;
}
proto = Object.getPrototypeOf(proto);
}
return false;
}
```
这个函数接受两个参数,第一个是要检查的对象,第二个是要检查的构造函数。函数会遍历对象的原型链,如果找到了与构造函数的原型相同的原型,就返回 true,否则返回 false。
手写 instanceof。
function myInstanceOf(left, right) {
let rightVal = right.prototype;
let leftVal = left.__proto__;
while (true) {
if (leftVal === null) {
return false;
}
if (leftVal === rightVal) {
return true;
}
leftVal = leftVal.__proto__;
}
}
测试用例:
function Test() {}
let test = new Test();
console.log(myInstanceOf(test, Test));
结果: true
instanceof的实现原理是只要右边变量的prototype在左边变量的原型链上即可,即左边的变量能在原型链上找到右边变量的prototype。在查找的过程中,会遍历左边变量的原型链,直到找到右边变量的prototype,如果查找失败,则会返回false。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [手写instanceof](https://blog.csdn.net/rh1289583756/article/details/126898416)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文