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

全局对象

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

  • global.parseInt
  • global.parseFloat
  • global.Number
  • global.String
  • global.Boolean
  • global.Object
    ②:浏览器加的
  • window.alert
  • window.prompt
  • window.history
  • window.comfirm
  • window.console.log
  • window.console.dir
  • window.document
  • window.document.createElement
  • window.document.getElementById
    API的详细资料

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

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是个对象

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容