JS中isPrototypeOf函数作用是什么,有哪些应用
Admin 2022-06-18 群英技术资讯 529 次浏览
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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了Vue+Springboot实现接口签名的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
这篇我们来了解关于JS内存泄漏的相关内容,对于JS内存泄漏以及其影响有很多朋友是不知道,JS内存泄漏对我们正常的程序运行是有很大影响的,对此下文就给大家来解决JS内存泄漏和如何防止内存泄漏。
这篇文章给大家分享的是用JS实现重置功能的方法。对于重置的功能大家应该都不陌生,当网页填写的信息需要大量修改时,重置功能快速的重置页面,非常的方便。文中的示例代码介绍得很详细,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。
vue怎么实现打印功能?一些朋友对于打印页面的表格功能的实现比较好奇,因此这篇文章就给大家来分析一下vue实现打印功能实现的方法,下文有示例供大家参考,接下来跟随小编一起看看吧。
javascript伪数组是什么意思?很多新手可能对于伪数组和数组的区别不是很了解,这篇文章主就要介绍javascript伪数组和数组,感兴趣的朋友可以参考下,希望大家阅读完这篇文章能有所收获,接下来小编带着大家一起了解看看。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008