Javascript 编程范式

Javascript 是多范式语言javascript

1、命令式  2、函数式  3、面向对象java

命令式数组

  基本的逻辑控制、迭代语句等。闭包

 

函数式函数

  一、scope Chain (做用域链)this

  Variable Object(变量对象),Activetion Object(活动对象)prototype

  ①VO是在函数被定义是生成的,持有 this ,arguments 和全部在当前函数中声明的变量、函数和具名函数参数;对象

  ②VO上私有的parent属性指向外层函数的VO,造成VO scope Chain继承

  ③最顶层函数的parent指向window,window指向本身。因此,window是scope CHhain的终点。ip

  

  二、read variable

  ①沿VO Chain,逐个向上查找变量名,返回第一个找到的结果;

  ②若知道window尚未找到VO,则会抛出reference error;

 

  三、write variable

  ①沿VO Chain,逐个向上查找变量名,对第一个找到的结果进行赋值;

  ②若知道window仍未找到,则在window上声明该变量,并赋值;

  ③在strict mode下,第二步里会抛reference error.

  ④变量、函数声明会被提高到当前函数的开头

  ⑤闭包:函数会始终持有被定义时的scope chain。因此该函数即便离开当前环境后,仍能访问被定义时能够访问的全部变量

 

面向对象

  一、Prototype Chain(原型链)

  ①对象实例化时,会将构造函数的prototype赋值给对象的私有变量中(prototype);

  ②prototype也是一个对象实例,若没有人为置换对象,则其为Object的实例;

  ③Object.prototype上,没有prototype。因此Object.prototype始终是prototype chain的终点。

  二、Read instance property(读取实例属性)

  ①先在当前instance上查找该property,若没有找到,则沿prototype chain向上查找,返回第一个找到的结果;

  ②若一直找到prototype chain的终点,仍没找到,则返回undefined

  三、write instance property(写实例属性)

  ①若当前实例存在该property,直接对其进行赋值;

  ②若当前实例上没有该property, 则在实例上建立该property并赋值;

  ③对实例属性赋值不会影响到prototype,以及相应构造函数的其余实例;

  ④若prototype上有引用类型的值,例如对象、数组,若在实例上对其状态进行修改,则会影响全部的实例

  四、类和继承

  ①定义类的本质:扩充原型,使其全部实例能够访问相应的属性、方法;

  ②继承的本质:延长原型链,将父类的实例置于子类原型链上,使子类的实例能够访问父类及其原型链上的全部属性和方法。

 这篇文章原文是在网上的,我本身整理了一下,敲出来的。感受对javascript的脉络更清晰了。

相关文章
相关标签/搜索