定义:
instanceof运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
对比对象: 构造函数的prototype 和 实例对象的原型链
举例
// 定义构造函数function Foo(){}
var o = new Foo();
o instanceof Foo; // true,因为 Object.getPrototypeOf(o) === Foo.prototype
需要注意的一些特殊现象
var simpleS章利勇tr = "This is a simple string"雷神游戏本;;var myString = new String();var newStr = new String("String created with constructor");var myDate = new Date();var myO牛仔抹胸裙bj = {};var myNonObj = Object.create(null);simpleStr instanceof男人挽回新高脂膜 String; // 返回 false, 非对象实例,因此返回 falsemyString instanceof String; // 返回 truenewStr instanceof String; // 返回 truemyString instanceof Object; // 返回 truemyObj insit培训学校tanceof Object; // 返回 true, 尽管原型没有定义({}) in做什么最赚钱stanceof Object; 北京印刷学院研究生 // 返回 true, 同上myNonObj instanceof Object; // 返回 false, 一种创建非 Object 实例的对象的方法myString instanceof Date; //返回 falsemyDate instanceof Date; // 返回 truemyDate instanceof Object; // 返回 truemyDate instanceof String; // 返回 false
参考文献
手写一个instanceof
根据定义我们知道对比的两个对象分别是一个实例对象和一个构造函数,判断构造函数的prototype属性是否在实例对象的原型链上, 所以一个简易的实现如下:
function myInstanceof(instance, con近视预防structor) { if (typeof constructor != 离子对手机原理图9;function') { 培训方法 throw new Error(constructor + 'should be a function&高尔夫球练习场app图标#39;)有时候有时候我会相信一切有尽头 } let proto = instance.__proto__; while(proto != null) { if (proto === constructor.prototype自考证书) { return t道路石油沥青rue } proto = proto.__proto__; } return false;}fun办公楼平面图ction Foo() {}const foo = new Foo();function 暗疮图片Fn(){}myInstanceof(foo, Foo) // truemyInstanceof(foo, Object) // truemyInstanceof(foo, Fn) // false本文发布于:2023-06-04 07:20:56,感谢您对本站的认可!
本文链接:http://www.ranqi119.com/ge/85/214406.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |