zoukankan      html  css  js  c++  java
  • 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的脉络更清晰了。

  • 相关阅读:
    Max Sum Plus Plus HDU
    Monkey and Banana HDU
    Ignatius and the Princess IV HDU
    Extended Traffic LightOJ
    Tram POJ
    Common Subsequence HDU
    最大连续子序列 HDU
    Max Sum HDU
    畅通工程再续
    River Hopscotch POJ
  • 原文地址:https://www.cnblogs.com/nunn/p/3460175.html
Copyright © 2011-2022 走看看