原型链理解和解析,原型链面试通关

 var F = function () {

    };
    var G = function(){
        this.name = 'xiaoming'

    };
    G.prototype.each=function(){
        console.log("吃货")
    };
    Object.prototype.a=function () {//(2)所有的对象函数的__proto__都会有a函数对象
        console.log("a()")
    };

    Function.prototype.b = function () {
        console.log("b()")
    };
    //Function 指的是继承在所有的window上面的声明的函数

    var f = new F();
    var g = new G();
    console.log(a instanceof Function);//(1)
    //(1) Object是所有的对象的根,在根上面添加了一个对象a,其实就是添加到__proto__上面,Function默认是在object手动添加的对象a;以后添加的对象是a的子集可以这么理解 b就是子集
    console.log(Function instanceof Object);//true
    console.log(Object instanceof Function);//true
    console.log(F instanceof Object);//true
    console.log(F instanceof Function);//true
    console.log(f instanceof Function);//false
    console.log(f instanceof Object);//true
    console.log(F.prototype.__proto__);//原型的规则就是现在他自己的本身去查找然后早__proto__上面去找一层一层的去查看找
    console.log(f  instanceof F.prototype.constructor);//实力化的对象是构造函数的constructor的属性


    f.a.__proto__.b();//打印出 b() 结合(1)理解  所以在a对象的原型下面就可以找到b();如果直接f.b();就会找不到
  //  f.b();//报错 Uncaught TypeError: f.b is not a function 因为b对象是a对象的子集所以直接调用就会没有
    g.a.__proto__.b();//打印出 b() 结合(1)和(2)理解 也可以拿到b函数对象

    //f对象和g对象是构造函数的实例 构造函数上面添加了原型的方法在查找方法的时候就会在__proto__上面去查看所以g和f就能获取到b()函数对象,产生层级的原因看(1)
    console.log(f);
    console.log(g);//通过构造函数this添加就不会在__proto__,直接在实例化对象上面
    console.log(Object.prototype);//手动给Object对象添加的所有属性

//不足之处提出大家共同进步!谢谢

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值