JS里的对象

221 阅读1分钟

全局对象

  1. ES规定的Global
  2. 浏览器里默认的是window,在控制台里输入window即可看到所有属性
每次打开浏览器它都会自动生成Global,Global指向的地址指向window,里面存放各种属性(函数,函数也是对象).

window的属性又分为两类:

  1. ES规定的
    • parseInt()
    • parseFloat()
    • Number()
    • String()
  2. 浏览器私有(winodw可省略)
    • alert() ---- window.alert("hi")
      弹出对话框提示"hi"

    • prompt() ---- var a = window.prompt('请输入**')
      输入的信息保存到a中

    • confirm() ---- var b = window.confirm('确认吗')
      b得到的值为true或false

    • console.log() ---- window.console.log('a')
      在控制台打印出'a'


简单类型与对象的区别.

    Number()

  1. 简单类型 m = Number('1')
    直接在stack里储存了数字1,是没有方法可以使用的,但是却可以直接使用方法,原因在于使用方法时,js内部会创建一个临时变量,比如:
    m.toSting()
    temp = new Number('1') 
    temp.toSting()
    

    于是下面这种方法用的人就少了.

  2. 对象 n = new Number('1')
    将n的地址存入stack,该地址指向一个heap内存区域,以键值对的方式存储了数字1.对应有很多方法可以使用.

其他类型也是如此.


原型

var a = new Number()
var b = new String()
var c = new Boolean()
var d = new Object()

以上这些对象都有toString() valueof()等方法,把这些方法放在一起.每个对象都有一个__proto__(指向共有的属性的集合),通过__proto__访问该集合来使用其中的函数.原型链就是从对象通过__proto__一级一级指向Object.prototype的形象叫法.

var 对象 = new 函数() 

对象.__proto__ === 函数.prototype                     //true
函数.prototype.__proto__ === Obeject.prototype        //true
函数.__proto__ === Function.prototype                 //true
Function.prototype === Object.prototype               //true

var a = new Number()
a.__proto__ === Number.prototype             //true

var b = new String()
b.__proto__.__proto__ === Object.prototype   //true 

Function.__proto__ === Function.prototype   //true
//左侧对象是由函数构成的,所以它的__proto__ === 构造函数.prototype