原型与原型链

全局对象 window

ECMAScript 规定全局对象叫做 global,但浏览器里默认的全局对象是 window,因为先有的浏览器。
window 是个哈希表,有很多属性。
window 的属性就是全局变量。
全局变量分为 ECMAScript 规定的和浏览器自己私有的。

  1. ECMAScript 规定的(global.):
    parseInt
    parseFloat
    Number()
    String()
    Boolean()
    Object()
  2. 浏览器私有的(window.):
    alert//弹框提示
    prompt//用户填写
    comfirm//确认
    consloe//开发者
    setTimeout(函数,时间)//定时器
    document//文档(DOM规范是由W3C制定的)
    history//浏览器历史记录

简单类型与对象

Number、String、Boolean

var n1 = 1
var n2 = new Number(1)

n1与n2的区别是内存不同。
n1是简单类型。
n2是对象,有很多 hash,可以便捷地操作这个1,比如可以用n2.toStringn2.valueOf等。
事实上,n1是简单类型,却也可以用n1.toString等,这是因为此时会申明一个临时对象temp = new Number(1),然后返回temp.toString的值,并删掉 temp。

String() 和 Boolean() 也同理。
String 的部分 API:
s2.charAt(n)// 获取某个索引对应的字符
s2.charCodeAt(n)// 获取某个索引对应的编码
s2.charCodeAt(n).toString(16)// 获取某个索引对应的16进制编码
s2.trim()//去掉字符串两边的空格
s1.concat(s2)//连接两个字符串
s1.slice(m,n)//切片,包含前面的,不包含后面的
s1.replace('e','o')//把 e 替换成 o

Object()

var o1 = {}
var o2 = new Object()

o1 和 o2 没区别。
但是 o1 与 o2 并不相等,所有新申明的对象都不会相等,因为指向的内存地址不同。

公用属性(原型) 与原型链

所有的对象都有 toString 和 valueOf 属性,JS 把所有的 toString 和 valueOf 放在一个对象(原型)里,然后让每一个对象的隐藏的 __proto__ 属性存储原型对象的地址。
所有 Object 的公用属性在 Object.prototype 中,
所有 Number 的公用属性在 Number.prototype 中,
Number.prototype 的公用属性在 Object.prototype 中。

原型链

在 JS 中,对象在调用一个方法(属性)时会首先在自身里寻找是否有该属性,若没有,则去原型链上去寻找,依次层层递进。
在还没有写任何代码时,浏览器已经初始化了以上内容。

根据 var 对象 = new 函数()
对象由函数构造
可以得到
对象.__proto__ === 函数.prototype

函数.prototype.__proto__ === Object.prototype`
函数.__proto__ === Function.prototype
Function.__proto__ === Function.prototype
Function.prototype.__proto__ === Object.prototype
Object.prototype.__proto__ === null

你可能感兴趣的:(原型与原型链)