diff --git a/docs/src/pages/FixedArticle/JavaScript/index.md b/docs/src/pages/FixedArticle/JavaScript/index.md index 9171a84..a5e61ea 100644 --- a/docs/src/pages/FixedArticle/JavaScript/index.md +++ b/docs/src/pages/FixedArticle/JavaScript/index.md @@ -277,4 +277,43 @@ Object.prototype.__proto__ === null - 一切函数对象(包括object对象),都继承自Function 对象 - Object对象直接继承自Function对象 - Function对象的__prop__会指向自己的原型对象,最终还是继承自Object对象 - \ No newline at end of file + +# 继承 +## 继承是什么? +- 继承是面向对象软件的一个概念,如果一个类别B继承自另一个类别A,就把B称为A的子类, 而把A称之为B的父类别,也可以称A是B的超类 +### 优点 +- 继承可以使子类具有父类的所有方法和属性,但不需要重新编码, +- 在子类继承父类时,可以对属性和方法重新进行定义 +- 可以批量生产处具有父类方法和属性的子类 +## 实现方式 +- 原型链继承 +- 构造函数继承(借助call) +- 组合继承 +- 原型式继承 +- 寄生式继承 +- 寄生组合式继承 +# 执行上下文和执行栈 +## 执行上下文 +- 执行上下文是对JavaScript代码执行环境的一种抽象概念,也就是说只要有JavaScript代码运行,那么他就一定是运行在执行上下文中 +执行上下文分为三种: +- 全局执行上下文:只有一个,在浏览器中就是window对象,在node中是global +- 函数执行上下文 :存在无数个,只有函数被调用时才会创建,每次调用函数都会创建一个新的执行上下文 +- Eval函数执行上下文:指的是运行在函数Eval的代码,很少用并且不建议使用 +## 生命周期 +- 执行上下文的生命周期包含三个阶段:创建阶段 - 执行阶段 - 回收阶段 +### 创建阶段 指函数被调用,但未执行任何内部代码之前 +创建阶段做了三件事: +- 确定this值,也被称之为 This Binding +- Lexical(词法环境) 组件被创建 +- VariableEnvironment(变量环境)词法被创建 +执行阶段 +- 在这个阶段,执行变量赋值、代码执行 +- 如果JavaScript引擎在源代码中声明的实际位置找不到变量的值,那么将其分配为Undefined +回收阶段 +- 执行上下文出栈等待虚拟机回收执行上下文 +## 执行栈 +- 执行栈,也叫调用栈,具有LIFO(后进先出) 结构,用于存储代码在执行期间创建的所有执行期上下文 +- 当JavaScript引擎开始执行你的第一行脚本代码时,他就会创建一个全局执行上下文,然后将它压到执行栈中 +- 每当引擎碰到一个函数的时候,他就会创建一个函数执行上下文,然后将这个函数执行上下文压到执行栈中 +- js引擎会执行位于执行栈栈顶的执行上下文(一般是函数执行上下文),当该函数执行结束后,对应的执行上下文就会被弹出,然后控制流程到达执行栈的下一个上下文 +