前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >instanceof

instanceof

作者头像
用户6847974
修改2019-12-24 10:21:43
5540
修改2019-12-24 10:21:43
举报
文章被收录于专栏:wowowowo

instanceof,判断一个实例是否属于某种类型。

代码语言:javascript
复制
// 判断 p 是否是 Person 类的实例
function Person(){} 
var p = new Person(); 
console.log(p instanceof Person)//true

更重要的一点是 instanceof 可以在继承关系中用来判断一个实例是否属于它的父类型。

instanceof的内部实现:

代码语言:javascript
复制
function instance_of(L, R) {//L 表示左表达式,R 表示右表达式
 var O = R.prototype;// 取 R 的显示原型
 L = L.__proto__;// 取 L 的隐式原型
 while (true) { 
   if (L === null) 
     return false; 
   if (O === L)// 这里重点:当 O 严格等于 L 时,返回 true 
     return true; 
   L = L.__proto__; 
 } 
}

从代码中我们可以看到,instanceof是比较左侧的__proto__(隐式原型)和右侧的prototype(显示原型)是否相等,如果不相等,取左侧__proto__的__proto__,依次循环比较,直到取到Object.prototype.__proto__即null为止。

this instanceof Person 用来判断是否使用了new关键字。

this instanceof Person我们可以这么分解:this.__proto__和Person.prototype

没有使用new,this指向window,如果使用了new,回到上面作为构造函数使用:

第一步: 创建一个空的对象,vat o = {}。 第二步: 链接该对象(即设置该对象的构造函数)到另一个对象,即o.\__proto__ == Vue.prototype。 第三步: 将步骤1新创建的对象作为this的上下文 第四步: 如果该函数没有返回对象,则返回this

结果可以看做:o.__proto__ = this.__proto__= Person.prototype ;

如果使用new操作符的话,那么this instanceof Person 则为true

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档