采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
你说的引用类型包括数组、对象、函数fn,你刚刚演示的其中fn又有_proto_,而所有的函数又有prototype,不矛盾吗?怎么区分
函数都有隐式原型__proto__ 和显式原型 prototype
对象,我这指的对象 就是你说的引用类型 数组 对象 函数的实例 [] {} function(){} 它们只有__proto__ 隐式原型,并没有显式原型!引用类型的目的就是为了通过引用来提高性能!而引用类型的体现就是隐式原型,它指向的是它对应的构造函数的原型对象(也就是prototype 这个显式原型).
打个比方,有三个实例,爷爷,爸爸,儿子!儿子要使用一个方法,它会先在自己的prototype里面找,是不是有这个方法,咦,咋没有,好吧,那我去爸爸那里找,怎么找呢?它就通过它自身的__proto__去找到它爸爸的prototype,看里面是否有它要的方法,咦,咋还是没有呢,行,那再顺着它爸爸的__proto__去找它爷爷的prototype,如果还没找i到,继续往上找,直到找到,找不到就null....(这也是原型链的一种体现)
这是__proto__ 和 prototype 的作用,也就是当初定义的其中一个边界概念!
总之你记住一点!任何的实例对象,都是由它的构造函数创建的实例!你要了解什么是构造函数,什么是实例,它们之间的关系!
了解了它们之间的关系以后,进一步你就会发现,构造函数里面既有__proto__ 又有prototype 而实例里面,只有隐式原型 __proto__ !__proto__和prototype 之间 就是这样的一个相互的三角关系!这也就是老师说的 它在js中的特殊作用,不知道我粗浅的解释是否帮到你!
补充一点在JavaScript里面函数本质也是一种对象,所以构造函数Function()的__proto__指向它自己的prototype
不矛盾啊。例如 var obj = {a: 10, b: 20}; 我说 obj 既有 a 属性又有 b 属性,矛盾吗?跟你提问的道理是一样的,__proto__ 和 prototype 仅仅是两个普通的属性值而已,只不过它对于 JS 来说有特殊的作用,本质上还是两个属性。
登录后可查看更多问答,登录/注册
BAT高级前端工程师亲授,结合真实面试题,提高面试成功几率
985 19
958 17
1.1k 11
1.1k 10
1.0k 10