美文网首页
原型与原型链  相关笔记

原型与原型链  相关笔记

作者: 松鼠煮鳜鱼 | 来源:发表于2019-01-21 17:57 被阅读0次

    全局对象Window

    ECMAScript 规定全局对象叫做 global,但是浏览器把 window 作为全局对象(浏览器先存在的)

    ECMAScript规定

    parseInt()
    parseFloat()
    Number()
    String()
    Boolean()
    Object()
    setTimeout()

    浏览器自己加的属性(私有)

    alert
    console
    prompt
    confirm
    document(DOM)
    history (BOM)

    window对象中的所有方法都可以省去window,alert()方法可以写成window.alert(),或者省去window,直接写做alert()
    浏览器自己加的属性,因为没有标准,所以浏览器上呈现的效果是不一样的

    简单类型与对象

    Number() 区别

    var n1=1 n1是个普通值
    var n2 = new Number(1) n2是个hash 存在堆
    同理还有:

    String()
    Boolean(xxx) xxx要注意5个false值
    Object()

    var a1={ }
    var a2= new Object( )
    a1 a2 都是对象 但不等

    __proto__prototype

    image

    上图是我们还没有写代码的时候,浏览器内存中已经构建好了的内容。
    由图可知,prototype是浏览器本身就写好的。

    当我们写了一句代码var s = new String(' hello ') 以后:

    image

    我们创建的对象的__proto__ 会用来指向原有的String对象,使得我们可以调用String对象的公有属性。

    于是我们有了以下结论:

    • __proto__ 是某对象公用属性的引用,是为了用户使用其共用属性中的方法而存在的 。
    • prototype 是浏览器写的,本身就存在,是某对象的共同属性的引用,为了不让对象的公用属性因没有被调用而被垃圾回收而存在。

    一些烧脑的等式

    众所周知,var 对象 = new 函数;是JS中很基本的语句,如var str = new String('aaa'),因此就有了下面这句等式:

    • 对象.__proto__ === 函数.prototype ,即对象的__proto__ 指向了构造这个对象的函数的prototype。 因此我们还知道了__proto__ 是对象我的属性,prototype是函数的属性。

    于是我们可以根据上述等式做一些推论:

    • 首先我们知道,函数的prototype是对象,这个对象对应的就是最简单的函数Object,所以替换的到下面的式子:
      函数.prototype.__proto__ === Object.prototype

    • 由于函数本身即是函数(最优先视为函数),也是对象,而函数的构造函数是Function ,所以替换得:
      函数.__proto__ === Function.prototype

    • Function即是对象,也是函数,但他优先是个函数,所以将Function替换上面的式子,则变为:
      Function.__proto__ === Function.prototype

    • Function.prototype也是对象,是普通的对象,所以其对应的函数使Object,替换得:
      Funciton.prototype.__proto__=== Object.prototype

    神奇的Function

    根据上面的各种推论,我们发现了其中最神奇的东西,Function,他即是函数,也是对象,所以他有函数的prorotype,也有对象的__proto__,所以出现了下图的情况:

    image

    Function.prototypeFunciton.__proto__互相引用。
    另外需要注意的一点:
    Object.__proto__ === Function.prototype,因为 Function 是 Object 的构造函数。

    相关文章

      网友评论

          本文标题:原型与原型链  相关笔记

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