zoukankan      html  css  js  c++  java
  • JS is JS——编写JS独有风格的JS代码 学习笔记

    JS is JS

    来自程劭非的讲座。。。   地址http://www.infoq.com/cn/presentations/csf-js-style-code

    JS 之父     Brandan  Eich

    My influences were awk,C,HyperTalk,and Self,commined with management orders to "make it look like java "   

    被管理层命令让他看上去像Java

    management 管理者

    prototype  来自于Self

    Agenda  议程

    抽象

    1、简化  抽象的方法

    将复杂物体的一个或几个特性抽出去,而自注意其他特性的行动或过程

    举例:手里的遥控器,不管它用什么材料做,只把它当按钮来使。。。   视而不见

    毛主席说:千万不要忘记阶级斗争。

    解放前贫农张大伯被地主“钱剥皮”借钱3元,被勒索"月三分“(每月利息是上月的30%)十个月后才还清,被剥削了多少钱利息?

    function caculate(){

      return 3*Math.pow(1.3,10)-3;         //运算,,

    }     //简化,是抽象的方法

    有选择的丢弃或是忘记。      客户要开发的项目,分析出什么是它想要的。

    2、归纳

    将几个有区别的物体的共同性质或特征,形象的抽取出来或孤立的进行考虑的行动或过程。

    抽象的不同取决于你的场景,和你的业务逻辑

    例子:美女,在骨科代夫看的是骨头,在我们眼里是另一种。

    例子,每个学生分3个苹果,总共要几个?

    function totalApples(count) {

      return count* count;  

    }


    程序正确,并不一定抽象正确

    代码要重构,或觉得差,很大部分因为抽象不对

    没想好,或业务在变化

    function Apple(){

    }


    function Kid() {

      this.apples = [];

      this.recevieApple = function(){

        apples.push(apple);

      }

    }


    function Teacher(){

      this.dispatchApple = function(kid) {

        kid.receiveApple(kid);

        kid.receiveApple(kid);

        kid.receiveApple(kid);

      }

    }


    function totalApples() {

      var kids = [new Kid(),new Kid(),new Kid()];

      var teacher = new Teacher();

      kids.forEach(function(kid){

      });

    }

    过于具体

    JS有三大范式

    面向过程抽象

    最最基础,最最重要的一种抽象

    过程是事种最常见的抽象,但它不完整

    程序 = 数据+过程   

    过程不是一种落后的编程范式

    理论上讲,过程不需要要有参数,,,但也可以有

    不太关注返回值,只是去改变数据

    全局或局部 

    函数和过程结合

    var data1,data2,data3;

    function process_main() {

      data1 = ;

      process1();

      process2();

      function process1() {

      }  

      function process2(){}

    }  


    面向对象

    对象是一个朴素的概念,大约在2-3岁产生

    JS中描述独立对象JSON   

    分类描述对象

    function Parent() {

    }

    function Child(x) {

      Parent.call(this);

      this.x = x;

    }

    面向对象    原型

    比猫大,头上有个王字,   上树抛异常

    跟小孩讲,,好例子。

    function Cat() {}

    function Triger() {

      this.draw("王")

    }

    Triger.prototype = new Cat();

    原型是一种比较随意的代码组织方式,,,不好读,好写.     复用不要求那么高,,它是很快的

    原型也可以很严谨, 自律

    JS里不需要有new 的,,   

    原型不是类,共有的原型,

    函数式抽象

    Lambda 演算

    其实就是替换

    函数式编程以演算为基础

    函数是第一型  Fist Class

    能做参数

    能做为返回值

    能赋值给变量 

    有直接量

    能运行时产生

    例子,,,,加法定义乘法

    function add(a,b) {

      return a +b ;  

    }

    function mul(a,b) {

       var r = a;

      for (var i = 1;i<b;i++)  {

        r = add(r,a)

      }

      return r;

    }  

    闭包   Lexical   Closcure   词法性   运行时会被绑定到不同的变量去,赋与不同的含义

    好处,,,更加灵活

    柯里化   Currying  

    f(a,b,c)

    f(a) ;   抛出异常???

    f2  = f(a);

    f2 (b,c)

    返回一个函数,接受这两个参数
     设计函数式API

    OO is poor man's closoure 

    function addEventListener (node ,type ,lisenter) {  }

    var node = new Node();

    var addEventListenerToNode = addEventListener(node);

    addEventListenerToNode(type,listener);

    函数式和Javascript里的函数不一致,,,它是一种只关注输入输入出的风格

    要能用闭包,currying   ,一等化   

    循环也用递归去表达   js 性能跟不上去

    引入一些函数式特性      

    比如排序,   传入一个函数做参数进去,正排返排

    创建你独有风格 

    jQuery      链式表达 声明式编程

    命名空间,脱离语言束缚



  • 相关阅读:
    时间记录日志
    软件工程作业02
    个人学习进度(第二周)
    《大道至简》第二章读后感
    《大道至简》第一章读后感
    构建之法阅读笔记02
    构建之法阅读笔记01
    web开发
    Tomcat的安装与环境配置
    java-10异常处理动手动脑
  • 原文地址:https://www.cnblogs.com/yushunwu/p/2300746.html
Copyright © 2011-2022 走看看