2018-09-26instanceof原理

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不适合检测一个对象本身的类型。

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

查看对象B的prototype指向的对象是否在对象A的[[prototype]]链上。如果在,则返回true,如果不在则返回false。不过有一个特殊的情况,当对象B的prototype为null将会报错(类似于空指针异常)。

函数模拟A instanceof B:

function _instanceof(A, B) {

var O = B.prototype;// 取B的显示原型

A = A.__proto__;// 取A的隐式原型

while (true) {

//Object.prototype.__proto__ === null

if (A === null)

return false;

if (O === A)// 这里重点:当 O 严格等于 A 时,返回 true

return true;

A = A.__proto__;

}

}获取更多资料QQ群786276452

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JS中原型链,说简单也简单。 首先明确: 函数(Function)才有prototype属性,对象(除Object...
    前小白阅读 9,383评论 0 9
  • var navigator = navigator || {};var window = window || {}...
    DF_Sky阅读 5,081评论 0 0
  • 26岁,你看着身边的人都结了婚 婚礼的份子钱逐年递增 春节回家,父母从带你串亲戚 变成了带你去见相亲对象 见了十几...
    gracesmall7阅读 3,068评论 0 1
  • 告诉我: 2016你有什么故事发生吗?() 2017希望你过上自己喜欢的生活 再见 我们的2016 你好 你们的2017
    种橘子的小林子阅读 708评论 7 1
  • 我们总是无法看清自己的生活,看不清前方,又不了解过去,日子过得好,全凭侥幸。——《里斯本夜车》 我坐在回家的出租车...
    DaNan_阅读 3,017评论 1 3