js高级 第六天 文章目录 js高级 第六天 回顾 作用域 作用域链 变量查找原则 执行上下文和作用域的区别 原型 原型分类 原型链 又叫隐式原型链 内置构造函数(对象) 原型中的属性

js高级 第六天

回顾

1.执行上下文与执行上下文栈
 执行上下文:js代码的执行环境,分为:全局执行上下文和函数执行上下文
 执行上下文栈:对执行上下文执行顺序进行一个排序(后进先出)

作用域

一段代码在程序中起作用的范围。分为全局作用域和局部作用域。

作用域链

 * 多个上下级关系的作用域形成的链, 它的方向是从下向上的(从内到外)
 * 查找变量时就是沿着作用域链来查找的

变量查找原则

	在当前作用域下的执行上下文中查找对应的属性, 如果有直接返回, 否则进入2
  * 在上一级作用域的执行上下文中查找对应的属性, 如果有直接返回, 否则进入3
  * 再次执行2的相同操作, 直到全局作用域, 如果还找不到就抛出找不到的异常

执行上下文和作用域的区别

1. 区别1
  * 全局作用域之外,每个函数都会创建自己的作用域,作用域在函数定义时就已经确定了。而不是在函数调用时
  * 全局执行上下文环境是在全局作用域确定之后, js代码马上执行之前创建
  * 函数执行上下文是在调用函数时, 函数体代码执行之前创建
2. 区别2
  * 作用域是静态的, 只要函数定义好了就一直存在, 且不会再变化
  * 执行上下文是动态的, 调用函数时创建, 函数调用结束时就会自动释放
3. 联系
  * 执行上下文(对象)是从属于所在的作用域
  * 全局上下文环境==>全局作用域
  * 函数上下文环境==>对应的函数作用域

原型

每个函数对象下都有一个prototype属性。这个属性就是原型

原型分类

显示原型和隐式原型

1. 每个函数function都有一个prototype,即显式原型(属性)
2. 每个实例对象都有一个__proto__,可称为隐式原型(属性)
3. 对象的隐式原型的值 为其对应构造函数的显式原型的值

5. 总结:
  * 函数的prototype属性: 在定义函数时定自动添加的, 默认值是一个空Object对象
  * 对象的__proto__属性: 创建对象时自动添加的, 默认值为构造函数的prototype属性值
  * 程序员能直接操作显式原型, 但不能直接操作隐式原型(ES6之前)

原型链 又叫隐式原型链

实例化对象的__proto__指向构造函数的prototype
构造函数prototype的__proto__指向Object.prototype
Object.prototype的__proto__指向null

原型链示意图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-udZ163l5-1608024093850)(D:\webApp\p3-js高级-H1907A\2009A\day-06\media\原型链.png)]

内置构造函数(对象)

内置构造函数(对象):
	Number  String Boolean Null Undefined Object Array Function Date Math RegExp(正则)

原型中的属性

1. 读取对象的属性值时: 会自动到原型链中查找
2. 设置对象的属性值时: 不会查找原型链, 
				如果当前对象中没有此属性, 直接添加给实例化对象本身属性并设置其值
				
3. 方法一般定义在原型中, 属性一般通过构造函数定义在对象本身上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值