JavaScript instanceof运算符浅析

描述

instanceof 运算符用来检测构造函数的 prototype 属性是否存在于参数 object 的原型链上。

语法

object instanceof constructor

参数

object 要检测的对象.

constructor 某个构造函数

功能和实现

instanceof的常规用法是判定一个对象是否是某个类的实例。

这一功能的实现是因为__proto__属性指向对象的构造函数的prototype属性。

详情请参阅原型链浅析

instanceof的源码如下:

function _instanceof(A, B) {
    var O = B.prototype;// 取B的显示原型
    A = A.__proto__;// 取A的隐式原型
    while (true) {
        if (A === null) //表示原型链搜索完毕
            return false;
        if (O === A) //这里重点:当 O 严格等于 A 时,返回 true
            return true;
        A = A.__proto__;
    }
}

通过代码可知,A(也就是要检测的对象)在原型链上遍历,直到Object.prototype.__proto__ === null,如果其中有一次__proto__指向的是B(也就是构造函数)的prototype属性,就说明A或者其原型链上的对象是通过B这一构造函数创建的,所以返回true,否则返回false

阅读更多
个人分类: JavaScript
上一篇原型链浅析
下一篇对于JavaScript中对象参数的传递方式的浅析
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭