Javascript中的__proto__和prototype

        /**
         * 说一下我理解的prototype和__proto__
         * prototype是原型对象上给实例对象提供的共有方法,而函数里面this那些都是原型对象给实例对象提供的私有方法
         *function fun(){
             this.str='我是一段字符串'
             this.f=function(){
                 console.log(this.str)
             }
         }
         fun.prototype.f=function(){
             console.log('我是原型链上绑定的方法')
         }
         const func=new fun()
         const func1=new fun()
         console.log(typeof func)//'object'
         console.log(typeof func1)//'object'
         console.log(func.__proto__===fun.prototype)//true
         console.log(func.f===func1.f)//false
         func.f===func1.f//false,因为每次创建新的实例对象都是独立的,就在堆内存中重新开辟一块空间,所以原型对象上面创建的this都是属于私有的
         console.log(func.f===func1.f)//true,因为typeproto是原型对象给实例对象创建的共有方法,所以是相等的
         那在解释一下万物皆对象 我的理解
        Object作为原型对象来讲的话,这句话怎么理解呢,因为Object.prototype为所有的实例提供了共有的方法,例如
        valueOf
        toString
        hasOwnProperty
        ...
        为什么string,function,number,boolean,array,object都可以使用Object.prototype上面的方法,不是说只有是Object实例才可以使用它的方法嘛
        javascript    中面向对象也是层层向上找,先是私有方法找如果找到则使用私有方法如果找不到则通过原型链(.__proto__)一级一级往上找直到null
        所以 let num=5 先是 Number原型对象的实例也是Object的实例,num.__proto__.__proto__ ===Object.prototype
        那在说说为什么Object.__proto__=Function.prototype因为Object作为原型对象他是函数,除了函数才会有prototype这个属性
        在解释一下num instanceof Object// false 因为 我们日常创建的let num=5,let str='我是一段字符串';
        字符串字面量 (通过单引号或双引号定义) 和 直接调用 String 方法(没有通过 new 生成字符串对象实例)的字符串都是基本字符串。
        JavaScript会自动将基本字符串转换为字符串对象,只有将基本字符串转化为字符串对象之后才可以使用字符串对象的方法。
        当基本字符串需要调用一个字符串对象才有的方法或者查询值的时候(基本字符串是没有这些方法的),
        JavaScript 会自动将基本字符串转化为字符串对象并且调用相应的方法或者执行查询。
        上面都是MDN文档解释 ,也就是并不是new String()出来的
        instanceof 判断的也是 一个对象的__proto__在不在那个prototype上面
        typeof str //'string'
        typeof (new String('我是字符串')) //object
        那怎么判断呢 
        str instanceof String
         str.constructor==String
         constructor是找到它的原始对象
         再说说 Object.create()
         let obj=Object.create(func.prototype)
         则就是 obj.__proto指向了func.prototype
         */

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值