最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • js原型原型链个人理解

    正文概述 掘金(星期六的猫)   2020-12-02   642

    1.js中所有的对象都是由函数生成的

    let obj={a:1,b:2}  等价于 let obj=new Object() obj.a=1 obj.2=2
    Object就是生成对象的构造函数
    
    let str='123' 字符串字面量写法生成基本字符串
    
    当基本字符串需要调用一个字符串对象才有的方法或者查询值的时候
    (基本字符串是没有这些方法的),JavaScript 会自动将基本字符串转化为字符串对象并且调用相应的方法或者执行查询。
    
    在调用字符串的方法时 js内部会先把基本字符串转换为字符串对象
    let strcopy=new String('123')
    strcopy.字符串方法或属性
    let str=strcopy
    strcopy=null
    
    

    2.js原型如何继承

    目前个人是这么理解的

    首先明确

    1.对象都有一个__proto__属性 这是一个隐藏属性js不希望开发者使用 这个属性指向的是生成这个对象的构造函数的原型对象(prototype)

      let obj={a:1,b:2}
      对象的构造函数是Object 所以obj.__proto__===Object.prototype
      console.log(obj.__proto__===Object.prototype)//true
      
      let str='123'
      字符串的构造函数是String 所以str.__proto__===String.prototype
      console.log(str.__proto__===String.prototype)//true
      
      number 和其他基本类型与String同理不一一列举
    
    

    2.函数具有两个属性(箭头函数除外) 一个prototype(函数的原型对象) 因为函数也是对象所以也有__proto__属性

    函数是new Function生成的 所以函数的__proto__指向Function.prototype

    prototype是原型对象所以也具有__proto__ 前面提到对象的构造函数是Object 所以prototype.proto

    指向 Object.prototype 然后 Object.prototype.__proto__指向null

    function test(){
       console.log('1222')
    }
    test.ad='123'
    函数也可以定义属性 因为 函数是new Function()出来的对象 所以函数也具有__proto__
    但prototype是函数独有的
    
    函数的构造函数是Function 所以函数的构造函数原型是Function.prototype
    console.log(test.__proto__===Function.prototype)//true
    
    Function的__proto__指向自身的原型
    cosnole.log(Function.__proto__===Function.prototype)
    
    
    
    

    3.访问对象的属性时 会先从自身属性寻找 自身没有这个属性则沿着生成这个对象的原型找

    原型上没找到 继续按着原型的构造函数的原型上找 一直找到Object.prototype它的构造函数原型为null返回

    可以这么想象 函数的__proto__就先想函数是怎么来的 是new Function() 那函数的构造函数是

    Function 构造函数的原型对象是 Function.prototype

    Function.prototype是个对象 那么对象是怎么来的是 new Object() 那么Function.prototype构造函数就是 Object 所以Function.prototype.__proto__===Object.prototype 而 Object.prototype.__proto__===null 查找到此为止 没找到则返回undefined

    对象的查找同上 先找到生成这个对象的构造函数的原型对象

     function myFun(){
        this.a='123'
     }
     let obj=new myFun()
     obj.__proto__===myFun.prototype
     myFun.prototype.__proto__===Object.prototype
     Object.prototype.__proto__===null
    

    4.总结: 记住两点

    1.所有对象都有__proto__属性 这个属性指向的是生成这个对象的函数的原型对象(prototype) 函数的__proto__ 指向Function.prototype

    2.所有函数具有两个属性 一个prototype(函数的原型对象) 因为函数也是对象所以也有__proto__属性

    原型图例如下js原型原型链个人理解


    起源地下载网 » js原型原型链个人理解

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元