美文网首页
JS中的全局对象、原型与原型链

JS中的全局对象、原型与原型链

作者: Nelson_sylar | 来源:发表于2018-10-23 11:25 被阅读0次

一、JS中全局对象与浏览器中的全局对象

  • JS中默认全局对象是global,而在浏览器的全局对象是window,如window.alert('hi');window.open('http://baidu.com')当然也可省略window,写成alert('hi');open('http://baidu.com')
    window对象它的属性有两种:
  1. ECMAScript规定的:
    parseInt,parseFloat,Number,String,Boolean,Object..etc
  2. 浏览器私有的:
    alert,prompt,console, document,history,setTimeout..etc
  • 注:浏览器不同私有属性的呈现可能不同


    qq浏览器
    edge浏览器

二、基本类型声明时调用对象方法

看个例子,以下number类型的声明有什么区别?

var n1=1;
var n2=new Number(1)

答:两种用法除了在内存存储方面有不同之外,其他一样,第二种是js之父仿照java的用法.

两种声明的内存存储示意图
看一下里面n1,n2里面到底是什么?
代码图
可以看到,n1就只存了数据1,n2是一个obj,里面除了1还存储了其他内容,那为什么n1这种基本类型,还会有属性呢?eg.n1.toString()
是因为每当使用n1.xxx的时候,js会自动先生成一个临时变量temp,var temp=new Number(n1)
让n1.xxx=temp.xxx,使用后立即销毁temp,所以当给n1.xxx赋值后,立马去取这个值会返回undefined,因为已经被销毁了
返回undefined

三、共用属性与原型链

展开对象n2,会发现里面除了有原本的值外,还有_proto_:Number,并没toString之类的属性.

obj number
那么tostring属性来自于哪里呢,再展开_proto_,发现里面包含了部分属性,这里面的属性就是Number的私有属性,并且还有_proto_:Object,
__proto__:number
再展开_proto_:Object,会发现里面还有属性,这里面的属性就是公共属性,即object属性,
__proto__:Object
当执行n1.xxx时,js首先会遍历自身属性,若没有,则会在自身的_proto_指定的地址找,若还没找到.则会在
_proto_中的_proto_指定地址找,直到出现结果为止.
  • 引申
    除了Number,还有String,Boolean有自己的私有属性,object的属性为公共属性,他们的地址引用关系可以用下图来表示,其中金色线表示其中的一条原型链


    示意图
  • 当初始化时,浏览器做了关于原型的哪些事?
    没写代码就有prototype
    其中各个函数的prototype就是原型,另外可以看出String.prototype===s.__proto__
    可得出
xxx1.prototype===x.__proto__;//xxx1为String,Number,Boolean,x为相应变量
Object.prototype===x.__proto__.__proto__;//x为相应变量

相关文章

  • 廖雪峰JS小记

    (function(){})() 原型,原型链 浅谈Js原型的理解JS 原型与原型链终极详解 对象 对象:一种无序...

  • JS中的全局对象、原型与原型链

    一、JS中全局对象与浏览器中的全局对象 JS中默认全局对象是global,而在浏览器的全局对象是window,如w...

  • 原型与原型链

    原型与原型链 全局对象window ECMAScript 规定全局对象叫做 global,但是浏览器把 windo...

  • 2022前端高频面试题

    JS相关 1.原型和原型链是什么 原型和原型链都是来源于对象而服务于对象的概念js中引用类型都是对象,对象就是属性...

  • JS原型链

    1什么是JS原型链? 通过__proto__属性将对象与原型对象进行连接. 1.1 JS原型链的作用? 组成的一个...

  • js_继承及原型链等(四)

    js_继承及原型链等(三) 1. 继承 依赖于原型链来完成的继承 发生在对象与对象之间 原型链,如下: ==原型链...

  • 原型和原型链的简单理解

    原型 在JS中原型就是prototype对象,用来表示类型之间的关系。 原型链 JS中对象和对象之间是有联系的,通...

  • 在nodejs中面向对象:Bearcat

    JS中的面向对象 最最最开始,我们先来说说JS中的面向对象。 原型链 参考文章:图解Javascript原型链 J...

  • 原型对象和原型链二者的关系

    开篇 之前对js中的原型链和原型对象有所了解,每当别人问我什么是原型链和原型对象时,我总是用很官方(其实自己不懂)...

  • 一个例子让你彻底明白原型对象和原型链

    开篇 之前对js中的原型链和原型对象有所了解,每当别人问我什么是原型链和原型对象时,我总是用很官方(其实自己不懂)...

网友评论

      本文标题:JS中的全局对象、原型与原型链

      本文链接:https://www.haomeiwen.com/subject/pjjozftx.html