
1.全局对象window
ECMAscript规定全局对象叫做global,但是浏览器把window作为全局对象(浏览器先存在)
window就是一个哈希表,有很多属性。window的属性就是全局变量。
这些全局变量分为两种
- 一种是ECMAscript规定的
- global.parseInt
- global.parseFloat
- global.Number
- global.String
- global.Boolean
- global.Object
2.一种是浏览器自己加的属性
- window.alert
- window.prompt
- window.comfirm
- window.console.log
- window.document
- window.document.createElement
- window.document.getElementById
又分为document文档的DOM属性api,和浏览器对象属性BOM
2.全局函数
var n1 = 1
var n2 = new Number (1) // 包装对象
n1.toString
实际为
temp = new Number(n1)
temp.toString
n1和n2的区别内存不同,
n1.toString
产生一个临时的变量(stack内存)转化用为就没。
每次都是调用一个新的临时对象
object
var o1 = {}
var o2 = new Object()
o1和o2没有区别 但o1 === o2 false
有各自的地址 heap内存
3. 公用属性藏在哪
所有对象都有toString
和 valueOf
属性,是否有必要给每个对象一个toStirng 和 valueOf呢?
明显不需要
JS就是把toSting和valueOf放在一个对象里(暂且叫做公用属性组成的对象)
然后让每一个对象的__proto__
存储这个“公用属性
组成的地址”。

JS通过window
全局对象,将公用的属性和方法函数存储起来,不被垃圾回收,不写任何代码也有prototype。
4. 重要公式
注意大小写,number和Number是不同的
var 对象 = new 函数()
对象.__proto__ === 对象的构造函数.prototype
// 推论
var number = new Number()
number.__proto__ === Number.prototype
var function = new Function()
function.__proto__ === Function.prototype
var object = new Object()
object.__prototype__ === Object.prototype
// 另外,所有的函数都是由Function构造出来的,所以
Number.__proto__ === Function.prototype //因为是Number是函数,是Function的实例
Function.__proto__ === Function.prototype
Object.__proto__ === Function.prototype //因为Function是Object的构造函数,此时将方法Object当作对象
Object.prototype.__proto__ 指向null

网友评论