在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
有时看一些框架源码的时候,会碰到 1、isPrototypeOf()
这个函数理解的关键是在原型链上,这个据说是 这里不详述其中的原理,简单的来讲就是3点:
示例1,Object类实例:let o = new Object(); console.log(Object.prototype.isPrototypeOf(o)); // true 因为 示例2,自己定义Human类:function Human() {} let human = new Human(); console.log(Human.prototype.isPrototypeOf(human)); // 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的结构就很容易清楚了: 那 示例4,Object.prototype是否是内置类的原型:
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 自然 示例5,Object也是函数(类):另外值得一提的是 请看下面输出:
2、和 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);
所以我的理解,这两个表达的意思是一致的,就是写法不同,下面两个输出应该是一致的: console.log(A instanceof B); console.log(B.prototype.isPrototypeOf(A)); 小结 其实要理解 到此这篇关于 |
请发表评论