JS中isPrototypeOf函数作用是什么,有哪些应用
Admin 2022-06-18 群英技术资讯 1388 次浏览
这篇文章给大家分享的是JS中isPrototypeOf函数作用是什么,有哪些应用。小编觉得挺实用的,因此分享给大家做个参考,文中的介绍得很详细,而要易于理解和学习,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。 isPrototypeOf() 这个函数,那么这个函数有什么作用呢?isPrototypeOf() 是 Object函数(类)的下的一个方法,用于判断当前对象是否为另外一个对象的原型,如果是就返回 true,否则就返回 false。
这个函数理解的关键是在原型链上,这个据说是JavaScript的三座大山之一。
这里不详述其中的原理,简单的来讲就是3点:
prototype原型属性。__proto__指向生成它的函数对象的prototype。prototype也有__proto__指向生成它的函数对象的prototype。let o = new Object(); console.log(Object.prototype.isPrototypeOf(o)); // true
因为o对象是Object的实例,所以o对象的原型(__proto__)指向Object的原型(prototype),上面会输出true。
function Human() {}
let human = new Human();
console.log(Human.prototype.isPrototypeOf(human)); // true
这例和上例类似,因为human对象是Human的实例,所以human对象的原型(__proto__)指向Human的原型(prototype),上面会输出true。
console.log(Object.prototype.isPrototypeOf(human)); // true
为什么呢?,用代码可能更好解释,请看下面推导:
// 因为 Human 的原型(prototype)中的原型(__proto__)指向 Object 的原型(prototype) Human.prototype.__proto__ === Object.prototype // 又因为 human 的原型(__proto__)指向 Human 的原型(prototype) huamn.__proto__ === Human.prototype // 所以human对象的原型(__proto__)的原型(__proto__)指向Object的原型(prototype) huamn.__proto__.__proto__ === Object.prototype
如果查看human的结构就很容易清楚了:

那 Object 的原型(prototype) 是不是就是 human 对象的原型呢?确切的说Object 的原型(prototype)是在 human 的原型链上。
JavaScript中内置类Number、String、Boolean、Function、Array因为都是继承Object,所以下面的输出也都是true:
console.log(Object.prototype.isPrototypeOf(Number)); // true console.log(Object.prototype.isPrototypeOf(String)); // true console.log(Object.prototype.isPrototypeOf(Boolean)); // true console.log(Object.prototype.isPrototypeOf(Array)); // true console.log(Object.prototype.isPrototypeOf(Function)); // true
自然Object.prototype也是Number、String、Boolean、Function、Array的实例的原型。
另外值得一提的是 Function.prototype 也是Object的原型,因为Object也是一个函数(类),它们是互相生成的。
请看下面输出:
console.log(Object.prototype.isPrototypeOf(Function)); // true
console.log(Function.prototype.isPrototypeOf(Object)); // true
instanceof 是用来判断对象是否属于某个对象的实例。
例如:
function Human() {}
let human = new Human();
// human 是 Human 的实例,所以结果输出true
console.log(human instanceof Human); // true
// 因为所有的类都继承Object,所以结果也输出true
console.log(human instanceof Object); // true
// 因为 human 对象不是数组,所以结果输出false
console.log(human instanceof Array); // false
再来一些内置类的例子:
// 【1,2,3] 是 Array 的实例,所以输出true
console.log([1, 2, 3] instanceof Array); // true
// 方法 function(){} 是 Function的实例,所以输出true
console.log(function(){} instanceof Function);
instanceof 作用的原理就是判断实例的原型链中能否找到类的原型对象(prototype),而 isPrototypeOf 又是判断类的原型对象(prototype)是否在实例的原型链上。
所以我的理解,这两个表达的意思是一致的,就是写法不同,下面两个输出应该是一致的:
console.log(A instanceof B); console.log(B.prototype.isPrototypeOf(A));
小结
其实要理解 isPrototypeOf 函数,关键是要理解原型链这个玩意。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
TypeScript语法详解之类型操作的补充 目录 类型操作的补充 类型断言的使用 非空类型的断言 可选链使用介绍 两个特殊操作符 字面量类型介绍 字面量推理介绍 总结 类型操作的补充 类型断言的使用 有时候TypeScript无法获取具体的类型信息,这个我们需要使用类型断言( Type Assertions). 比如我们在操作DOM的时候, 通过 document.getElementById 获取元素, TypeScript只知道该函数会返回HTMLElement ,但并不知道它具体的类型, 是无法得知具体是img还是div等等: 当我
目录前言组合函数含义封装盒子任意组合compose 变体抽象能力阶段小结前言这是【JS如何函数式编程】系列文章第三篇。点赞????关注????,持续追踪????前两篇传送门:《XDM,JS如何函数式编程?看这就够了!(一)》《XDM,JS如何函数式编程?看这就够了!(二)》在第二篇,我们谈了基础之基础,重要之重要——“偏函数”,偏函数通
windows下安装Node出现报错2503怎么解决?有一些朋友就有遇到node安装失败2503报错的问题,那么究竟我们该怎么办呢?下文给大家分享了一个解决方法,操作如下,大家可以了解看看,希望能帮助到大家。
今天我们来了解JavaScript中this指向的内容,下文会给大家介绍this的指向问题以及改变this指向的方法,对于学习和理解this的指向有一定的帮助,需要的朋友可以参考了解看看,接下来就跟随小编一起学习一下吧。
JavaScript中怎么实现继承?下面本篇文章给大家分享JS实现继承的6种方法,希望对大家有所帮助!
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008