6.彻底搞懂 instance 和 typeOf

发布于 2023-01-30 20:30:01 字数 1468 浏览 85 评论 0

instanceof 运算符用来判断一个构造函数的 prototype 属性所指向的对象是否存在另外一个要检测对象的原型链上

描述

instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。

1.instanceof 作用是用来做检测类型

1、instanceof 可以检测某个对象是不是另一个对象的实例

var Person = function(){};
var student = new Person();
console.log (student instanceof Person); // true

2、instanceof 可以检测父类型

function Person(){};
function Student(){};
var p = new Person();
Student.prototype = p; // 继承原型
var s = new Student();
console.log(s instanceof Student); // true
console.log(s instanceof Person); // true

注意:instanceof 不适合检测一个对象本身的类型

instanceof 检测一个对象A是不是另一个对象的实例原理

查看对象B的 prototype 指向的对象是否在对象 A 的 [[prototype]] 链上,如果在,则返回 true,如果不在则返回 false,特殊情况,当对象的 prototype 为 null 将会报错。

函数模拟 A instanceof B

function _instanceof(A,B) {
    var o = B.protrotype; // 取B的显示原型
    A = A.__proto__; //取A的隐式原型
    while(true) {
        // Object.prototype.__proto__ === null
        // 一直沿着原型链往上查找
        if(A === null) {
            return false;
        }
        if (o === A) {
            return true;
        }
        A = A.__proto__;
    }
    
}


总结

  1. 所有的构造器的 constructor 都指向 Function
  2. Function 的 prototype 指向一个特殊匿名函数,而这个特殊匿名函数的 proto 指向 Object.prototype

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

倚栏听风

暂无简介

文章
评论
587 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文