全局对象,全局函数,原型链

2019-02-22  本文已影响0人  吴一晏

全局对象

ECMAScript规定的全局对象叫global,浏览器把window作为全局对象(因为人家浏览器出的早啊)。
window是一个哈希表,有很多的属性。这些属性就叫做全局变量。
这些全局变量分为两种:
①:ECMAScript规定的

全局函数。复杂类型和简单类型的区别

1.Number
var n = new Number(1) 创建一个 Number 对象
2.String
var s = new String('hello') 创建一个 String 对象
3.Boolean
var b = new Boolean(true) 创建一个 Boolean 对象
4.Object
var o1 = {}
var o2 = new Object()
那么1和new Number(1)有什么区别呢。1直接存储在stack里,new Number(1)则是作为一个对象,存储一个地址,指向一个对象。 String,Boolean同理。 但是上面对象o1和o2没有区别,但是o1和o2不相等。

var n1 = 1; n1在内存图中储存的只是一个number1,但是n1.toString() 显示结果为'1',n1不是对象,这结果是哪来的呢。 因为浏览器临时调用了一个变量,将这个变量的toString值当做n1的toString值,再讲这个变量消除。

公用属性,原型链

所有的对象都有toString,valueOf属性,是不是每个对象都有储存一个toString和valueOf呢?不是的。
JS 的做法是把 toString 和 valueOf 放在一个对象里(暂且叫做公用属性组成的对象),然后让每一个对象的__proto__存储这个「公用属性组成的对象」的地址。

每个实例对象(object )都有一个私有属性(称之为__proto__)指向它的原型对象(prototype)。该原型对象也有一个自己的原型对象(__proto__) ,层层向上直到一个对象的原型对象为 null。根据定义,null 没有原型,并作为这个原型链中的最后一个环节。几乎所有 JavaScript 中的对象都是位于原型链顶端的Object的实例。

重要公式!!!

var 对象 = new 函数()
对象.__proto__ === 对象的构造函数.protoytpe

//推导
var number = new Number()
number.__proto__ = Number.prototype
Number.__proto__ = Function.prototype // 因为 Number 是 Function 的实例

var object = new Object()
object.__proto__ = Object.prototype
Object.__proto__ = Function.prototype // 因为 Object 是 Function 的实例

var function = new Function()
function.__proto__ = Function.prototype
Function.__proto__ == Function.prototye // 因为 Function 是 Function 的实例!
Function.prototye.__proto__ = Object.prototype//Function.prototye是个对象

上一篇 下一篇

猜你喜欢

热点阅读