← 返回目录

第 5 卷

第 5 / 19 卷日期:

执行上下文的VO在初始化,执行阶段

AOActivation Object活动对象1. 是函数执行上下对象,由VO在执行

而来;<br>2. 与V AO可以被访问(间

量查找),且新增 arguments 对象

函数执行上下文创化VO,执行阶段V

存储函数参数、 arguments、内

部函数声明。

GOGlobal Object全局对象1. 是全局执行上下也是全局作用域的

<br>2. 浏览器环境 window 对象,N

中是 global 对象为 globalThis)

存储全局变量、全置对象(如 Math

Date),全局 t GO;<br>4. 可直

(如 window.nam global.consol

LELexical Environment词法环境1. ES6引入的概念传统的VO/AO,更

变量和函数的作用 <br>2. 由**环境记

(Environment R 外部词法环境引用

Lexical Environm Reference)**组成

环境记录存储当前变量和函数

  • let / const /

n 声明),外部引

VEVariable Environment变量环境1. ES6引入的概念境(LE)结构完全

是由环境记录和外成;<br>2. 专门用

var 声明的变量和(这也是 var 存在

升,而 let / con 的核心原因);<b

行上下文创建阶段化 var 变量为

undefined,LE let / const 变量

始化”(暂时性死

EREnvironment Record环境记录1. 词法环境(LE)

境(VE)的核心组 <br>2. 用于存储当

的变量、函数、参容器;<br>3. 分为

型:<br> - 声明式录:用于函数作用

用域,存储 let / const / f

class 声明;<b 式环境记录:用于

和 with 语句,关具体的对象(如全

window)。

核心关联

  1. ES5及之前:使用VO(全局)/ AO(函数) + GO + 作用域链描述执行上下文;
  2. ES6及之后:使用LE(存储 let / const) + VE(存储 var) + ER + GO + 作用域链描述执行

上下文,本质是对传统模型的优化和补充,更贴合 let / const 的块级作用域特性。

  1. 请解释JavaScript中的原型(Prototype)概念以及原型链是什么。

(1)原型(Prototype)概念

◦ 每一个JavaScript对象(除 null 和 undefined 外)都有一个内置的隐藏属性

[[Prototype]],该属性指向另一个对象(即该对象的原型对象);

◦ 这个属性是隐藏的,无法直接访问(早期浏览器提供 __proto__ 属性作为访问接口,ES6后

可通过 Object.getPrototypeOf(obj) 和 Object.setPrototypeOf(obj, proto) 来操作);

◦ 对象可以继承其原型对象上的所有属性和方法(当访问对象的某个属性/方法时,若对象自身没

有,则会查找其原型对象)。

  1. 构造函数的原型(prototype,也叫显式原型)

◦ 每一个JavaScript函数(除箭头函数外)都有一个公开的 prototype 属性,该属性指向一个

对象(称为原型对象);

◦ 当使用 new 关键字调用构造函数创建实例对象时,实例对象的 [[Prototype]](隐式原

型)会自动指向该构造函数的 prototype(显式原型);

◦ 原型对象上通常会定义所有实例共享的属性和方法,避免每个实例都创建重复的方法,节省内

存。

示例:

Code block

1// 构造函数 2function Person(name) {

3this.name = name; // 实例自身属性 4}

5//构造函数的prototype(显式原型):定义共享方法
6Person.prototype.sayHello = function() {
7console.log(`Hello, ${this.name}`);
8};

9 10// 创建实例

11const p1 = new Person("张三");

12const p2 = new Person("李四");

13

14//实例的隐式原型__proto__指向构造函数的显式原型prototype
15console.log(p1.__proto__ === Person.prototype);// true
16console.log(p2.__proto__ === Person.prototype);// true

17 18// 实例继承原型上的方法

19p1.sayHello(); // Hello, 张三 20p2.sayHello(); // Hello, 李四

全站分卷索引 · 19 卷
  1. 1第 1 卷
  2. 2第 2 卷
  3. 3第 3 卷
  4. 4第 4 卷
  5. 5第 5 卷
  6. 6第 6 卷
  7. 7第 7 卷
  8. 8第 8 卷
  9. 9第 9 卷
  10. 10第 10 卷
  11. 11第 11 卷
  12. 12第 12 卷
  13. 13第 13 卷
  14. 14第 14 卷
  15. 15第 15 卷
  16. 16第 16 卷
  17. 17第 17 卷
  18. 18第 18 卷
  19. 19第 19 卷