面向对象吧!

全局对象window

标准里名为 global
但浏览器实现为window,global具有的window都有

ECMAScript规定的

如:

  • parseInt()
  • parseFloat()
  • ……

浏览器私有

每个浏览器不一样,
比如chrome/firefox具有

  • alert()
    弹出提示框
    还有
  • prompt()
    提示输入
  • confirm()
    提示确认
  • console()
    控制台打印
  • setTimeout(function,3000)
    指定毫秒后执行函数
  • document
    document也是私有的
    dom规范由w3c指定

声明对象

var n = new number(1)
把1包装成对象,会有更多的一些方法

但是基本类型其实也可以使用各种方法,这是因为JS会在发现把其当作对象时,自动以它的值创建对象,调用结束就把它删除,这就像java的自动装箱/拆箱,所有的基本类型都是如此,包括string

语法糖

1
2
a = {}
var = new Object()

这两者功用是一样的

String对象

  • .toString(a) a指定以几进制显示
  • .charAt()返回指定索引的字符
  • .charCodeAt(0) 返回指定索引的unicode编码
  • .trim 去掉多余的空格
  • .concat(s) 将当前字符串与参数里面的字符串连接起来并返回(那和+有什么区别?)
  • .slice(1,2) 返回指定索引到指定索引的字符(0,1]

Boolean对象

注意:new Boolean() 也是true

原型链(继承?)

为了解决什么问题?

某一类对象拥有共同的方法,或属性,每个对象都声明一次既费时间又浪费内存,这时候使用继承就OK啦!

怎么解决的

拥有共通属性的对象,把共通的属性抽象出来作为一个父对象,子对象不再存储这些共通的属性和方法,而使用__proto__存储父对象。

当我像调用toString()时,过程是怎样的?

过程:

  1. 判断是否是对象,如果是,自动装箱将其包装成对应的临时包装对象。
  2. 查找当前对象是否包含toString()方法。
  3. 如果当前对象不包括,访问__proto__里存储的父对象,继续寻找toString()
  4. 如果找到停止寻找,否则继续递归下去。

从这里就可以看出,如果子对象和父对象拥有同样的方法/或者属性,总是使用的子对象的值,我们可以把这个称作覆盖

Object是所有对象的父对象,Object再向上就为null

如何设置公有属性?

这里我们其实需要理解是如何创造对象的?

1
var n = new Object()

在这里 其实new Object()实际在调用一个函数,我们可以称作这个函数为构造函数,函数返回一个根据参数生成的对象。

因此这里可以看做

1
2
3
4
var n = function Constructor(){
...
return object
}

实质上,在js中,函数也只是一种对象

Function对象

如果我们使用console.dir打印Obeject、Number、Function的所有属性,我们就能真正理解__proto__和prototype具体是个什么鬼

  • Function
    1
    2
    3
    ...
    prototype : f()
    __proto__ : f()
    • 展开prototype
      1
      2
      ...
      prototype : Object
  • Object
    1
    2
    prototype : 一堆我看不懂的东西
    __proto__ : f()
  • Number
    1
    2
    prototype : 一堆我看不懂的东西
    __proto__ : f()

我们发现了什么?
我们知道使用new 关键字创建的对象会得到原型对象的prototype的地址并保存在__proto__中,这样就能共用方法及属性。

但是,原型对象又怎么产生?
这里就解释了一切,Function是所有原型对象的爸爸,所有的原型对象都是Function构造的,而Function爸爸需要让所有原型对象最后都继承自Object,这样才能面向对象嘛,所以prototype中的__proto__ : Object表示继承自Object,这种处理方式可能就叫中间层?

至于__proto__指向自己,我猜测可能是在某些情况需要new Function来创造一个Function子对象,这样就能让Function表里如一。

以上很多都是自己的猜测,可能有许多谬误,以后加深理解了再来更新,不说了,图还没画完呢…赶作业去了