js高级_103、原型链面试题

面试题1

实例的__proto__属性是实例被创建时赋予的,这个属性指向的是实例被创建时构造函数的prototype对象

  function A(){
           }
           
           A.prototype.n=1;
           
           var b=new A();
           
           A.prototype={
           	n:2,
           	m:3
           }
           
           var c=new A();
           console.log(b.n+","+b.m+","+c.n+","+c.m);//1  undefind 2   3

2面试题

只要是对象调用方法,都是通过该对象的原型属性'_ prototype _',去往原型对象找,原型对象找不到再去原型的额原型找,直到原型链尽头

function  F(){
         	
         }
         
         Object.prototype.a=function(){
         	console.log('a');
         }
         
         Function.prototype.b=function(){
         	console.log("b");
         }
         
         var f=new F();
         
         f.a();
         //f.b();//报错
         F.a();//大写F说明把F函数当作一个对象,用它的proto属性去原型里面找,
         F.b();

上面的f.b()报错的原因:

b方法是放在Function的原型对象里的,用实例f去调用首先它跟着自己的隐式原型一个一个找,最后到null也没有找到,也就是没有相交的部分,所以就报错。
image

F.a();

将F函数当成对象,用对象的隐式原型proto属性去找,能找到。
image

F.b();

image

posted @ 2022-03-13 15:47  青仙  阅读(225)  评论(0编辑  收藏  举报