原型与原型链  相关笔记

2019-01-21  本文已影响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对象的公有属性。

于是我们有了以下结论:

一些烧脑的等式

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

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

神奇的Function

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

image

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

上一篇 下一篇

猜你喜欢

热点阅读