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

原型与原型链  相关笔记

作者: 松鼠煮鳜鱼 | 来源:发表于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 的构造函数。

相关文章

  • 原型与原型链  相关笔记

    全局对象Window ECMAScript 规定全局对象叫做 global,但是浏览器把 window 作为全局对...

  • JavaScript 原型、原型链与原型继承

    原型,原型链与原型继承 用自己的方式理解原型,原型链和原型继承 javascript——原型与原型链 JavaSc...

  • 原型与原型链相关

    前言 最近在整理原生JS的相关知识,发现关于原型和原型链涉及的知识对理解JS有很大的帮助。遂分享一下。 构造函数 ...

  • 原型、原型链、继承

    原型与原型链 什么是原型、原型链 原型:每一个对象(除null外)都有另一个对象与之相关联,这个另一个对象便称之为...

  • 2019-01-28

    原型与原型链

  • 廖雪峰JS小记

    (function(){})() 原型,原型链 浅谈Js原型的理解JS 原型与原型链终极详解 对象 对象:一种无序...

  • Javascript(三)之原型继承理解

    进阶路线 3 原型继承 3.1 优秀文章 最详尽的 JS 原型与原型链终极详解 一 最详尽的 JS 原型与原型链终...

  • JS的__proto__和prototype

    最近在回顾JS的原型和原型链的知识,熟悉JS的同学都知道JS的继承是靠原型链实现的,那跟原型链相关的属性__pro...

  • JavaScript 面向对象第一篇

    1.原型链 ---- (实例对象与原型之间的连接 叫做原型链) 2. hasOwnproperty ----(看是...

  • 原型与原型链以及继承

    今天复习下原型与原型链的知识,以及记录新学的继承知识点。 知识点纲要 原型与原型链 es5与es6继承 什么是原型...

网友评论

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

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