• Javascript 编程范式


    Javascript 是多范式语言

    一、命令式  二、函数式  三、面向对象

    命令式

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

    函数式

      1、scope Chain (作用域链)

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

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

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

      ③最顶层函数的parent指向window,window指向自己。所以,window是scope CHhain的终点。

      

      2、read variable

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

      ②若知道window还没有找到VO,则会抛出reference error;

      3、write variable

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

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

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

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

      ⑤闭包:函数会始终持有被定义时的scope chain。所以该函数即使离开当前环境后,仍能访问被定义时可以访问的所有变量

    面向对象

      1、Prototype Chain(原型链)

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

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

      ③Object.prototype上,没有prototype。所以Object.prototype始终是prototype chain的终点。

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

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

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

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

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

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

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

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

      4、类和继承

      ①定义类的本质:扩充原型,使其所有实例可以访问相应的属性、方法;

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

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

  • 相关阅读:
    百度地图根据经纬度计算瓦片行列号
    【完全开源】百度地图Web service API C#.NET版,带地图显示控件、导航控件、POI查找控件
    TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
    重中之重:委托与事件
    可复用代码:组件的来龙去脉
    [史上最全]C#(VB.NET)中位运算符工作过程剖析(译)
    物以类聚:对象也有生命
    导入导出Android手机文件
    Android修改system只读权限
    SSHDroid(SSH Server for Android)通过PC或命令连接android
  • 原文地址:https://www.cnblogs.com/nunn/p/3460175.html
Copyright © 2020-2023  润新知