问题
有如下代码:
//代码1 function People(){} var p = new People() p.__proto__ === People.prototype People.__proto__ === Function.prototype People.prototype.__proto__ === Object.prototype //代码2 Function.prototype === Function.__proto__ Function.prototype === Object.__proto__ Function.prototype.__proto__ === Object.prototype Function instanceof Object //代码3 Object instanceof Function Function instanceof Object Function instanceof Function Object instanceof Object
-------------------------------------------------------------------------
解答:
在解答上面的问题之前,先记住下面几句话,这几句话能解释一切关于原型方面的问题:
下面是代码1的原型图:
(3)People 作为对象的角色被函数Function创建,所以 Function.prototype === People.__proto__
下面是代码2的原型图:
(3)Function.prototype 是普通对象,普通对象是由Object创建的,所以 Function.prototype.__proto__ === Object.prototype
关于代码3:
instanceof 的作用是判断一个对象是不是一个函数的实例。比如 obj instanceof fn, 实际上是判断fn的prototype是不是在obj的原型链上。比如: obj.__proto__ === fn.prototype, obj.__proto__.__proto__ === fn.prototype,obj.__proto__..._proto__ === fn.prototype,只要一个成立即可。
所以(根据图2来找)
至此,问题全被完美解决。
饥人谷一直致力于培养有灵魂的编程者,打造专业有爱的国内前端技术圈子。如造梦师一般帮助近千名不甘寂寞的追梦人把编程梦变为现实,他们以饥人谷为起点,足迹遍布包括facebook、阿里巴巴、百度、网易、京东、今日头条、大众美团、饿了么、ofo在内的国内外大小企业。 了解培训课程:加微信 xiedaimala03,官网:https://jirengu.com