最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
JavaScript中isPrototypeOf函数代码示例
时间:2022-06-29 02:05:39 编辑:袖梨 来源:一聚教程网
本篇文章小编给大家分享一下JavaScript中isPrototypeOf函数代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
1、isPrototypeOf()
isPrototypeOf()是Object函数(类)的下的一个方法,用于判断当前对象是否为另外一个对象的原型,如果是就返回true,否则就返回false。
这个函数理解的关键是在原型链上,这个据说是JavaScript的三座大山之一。
这里不详述其中的原理,简单的来讲就是3点:
1. 函数对象,都会天生自带一个prototype原型属性。
2. 每一个对象也天生自带一个属性__proto__指向生成它的函数对象的prototype。
3. 函数对象的prototype也有__proto__指向生成它的函数对象的prototype。
示例1,Object类实例:
let o = new Object(); console.log(Object.prototype.isPrototypeOf(o)); // true
因为o对象是Object的实例,所以o对象的原型(__proto__)指向Object的原型(prototype),上面会输出true。
示例2,自己定义Human类:
function Human() {} let human = new Human(); console.log(Human.prototype.isPrototypeOf(human)); // true
这例和上例类似,因为human对象是Human的实例,所以human对象的原型(__proto__)指向Human的原型(prototype),上面会输出true。
示例3,再来看看Object的原型(prototype)是否是human的原型:
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的原型链上。
示例4,Object.prototype是否是内置类的原型:
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的实例的原型。
示例5,Object也是函数(类):
另外值得一提的是Function.prototype也是Object的原型,因为Object也是一个函数(类),它们是互相生成的。
请看下面输出:
console.log(Object.prototype.isPrototypeOf(Function)); // true
console.log(Function.prototype.isPrototypeOf(Object)); // true
2、和 instanceof 的区别
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));
相关文章
- 《无限暖暖》天星之羽获得位置介绍 12-20
- 《流放之路2》重铸台解锁方法介绍 12-20
- 《无限暖暖》瞄准那个亮亮的成就怎么做 12-20
- 《无限暖暖》魔气怪终结者完成方法 12-20
- 《无限暖暖》曙光毛团获得位置介绍 12-20
- 《无限暖暖》日光果获得位置介绍 12-20