美文网首页
js里的对象(原型与原型链)

js里的对象(原型与原型链)

作者: 索伯列夫 | 来源:发表于2018-10-07 16:35 被阅读0次

    按照刚才帖子:

    var a = 1
    a.toString() //'1'
    

    但是很显然,如果需要创建许多变量,不可能每一个变量都自带一个toString()方法。既然每个类型都有toString,那么在实现的时候,可以将toString单独列出来。

    这时候我们新建一个对象,

    var o1 = new Object()
    o1.name = 'hua'
    o1.age = 18
    

    o1对象中,直接放了name与age,但是我们依然可以使用toString()方法,那么这个方法,在哪,如何建立联系。实际上这时候,给o1添加了一个属性proto,指向toString()等公用方法所在的地方。
    这个时候,就是有再多的对象,都是这么一个方式:

    对象
    同样的道理,Number也是一样的:
    number&object
    看结果:
    var n = new Number(1)
    n.__proto__.__proto__.toString === 
    o1.__proto__.toString //true
    

    当number与object对象有很多时候,是这样的:


    多个对象

    多个不同类型的数据:


    多个类型

    运行如下代码:o1.__proto__ === Object.prototype //true

    prototype与proto

    首先需要明确,不写代码就有prototype。
    在window对象下产生

    不写代码
    当然最后number,string,boolean需要指向object共用.
    写了代码
    可以看的很清楚,s.__proto__String的公用属性的引用,String.prototypeString的公用属性的引用:看代码:
    var s = 'hi'
    String.prototype === s.__proto__ //true
    

    重要:
    var 对象= new 函数()
    对象.proto === 函数.prototype

    var fn = new Function()
    typeof fn //"function"
    
    fn.__proto__ === Function.prototype //true
    
    Function.__proto__ === Function.prototype //true
    Function.__proto__ === Object.prototype //false
    Function.prototype.__proto__ === Object.prototype //true
    

    可以这样来看Function,首先它是一个对象,那么一定拥有proto,其次它是一个函数可以用来构造别的对象,那么就有prototype。

    Function

    原型链:JavaScript 对象有一个指向一个原型对象的链。当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。

    来自饥人谷上课笔记

    相关文章

      网友评论

          本文标题:js里的对象(原型与原型链)

          本文链接:https://www.haomeiwen.com/subject/gtmlaftx.html