好吧,因为很重要的事情,几天没写笔记了。

关于对象:

  • ||可以用来填充默认值,如:myApp.name || "无"
  • &&可以用来避免错误,myApp.NameObj有某种情况不存在,那么可以用myApp.NameObj && myApp.NameObj.Name避免脚本错误
  • 所有通过对象字面量创建的对象都连接到Object.prototype,当你创建某对象时也可以选择另一个对象作为它的原型,比如:
    if(typeof Object.beget!=='function'){
    Object.create=function(o){
    var F=function(){};
    F.prototype=o;
    return new F();
    }

    }
    var another_stooge=Object.Create(stooge);
  • delete运算符可以删掉对象的属性,如:delete obj.name
  • 为了减少全局变量的污染,可以创建一个唯一的全局变量对象,所有的全局变量都写在这个全局变量对象里

关于函数:

  • 对象字面量产生的字面量的原型都是Object.prototype,函数对象连接到Function.prototype.(该原型对象本身连接到Object.prototype)
  • 除了声明时定义的形式参数,每个函数还接收两个附加的参数:this和arguments。this的值取决于调用的模式。
  • JS中有四种调用模式:
    • 方法调用模式

      • 方法定义:如果一个函数被保存为对象的一个属性,那么就被称为方法。
      • 调用的时候this被绑定为该对象。
    • 函数调用模式
      • 就被当做一个函数来调用,this会被绑定为全局对象。
    • 构造器调用模式
      • 如果在一个函数前面带上new来调用,那么背地里会创建一个连接到该函数的prototype成员的新对象
      • 同时this会绑定到那个新对象上
    • Apply调用模式
      • 因为函数就是对象,所以函数也可以拥有方法,也就是Apply方法
      • funcObj.Apply(obj,array),第一个值obj赋值给this,第二个值为参数数组,funcObj为函数对象
  • 实际参数和形式参数的数目不匹配并不会导致错误
  • arguments数组表示实际传进来的参数的数组,说是数组,实际上这是个数组对象,它没有任何数组的方法。
  • 扩充类型的功能:举个栗子:
  • //下面这个是本书添加新函数的方法
    Function.prototype.AddMethod=function(funcName,func){
    this.prototype[funcName]=func;
    return this;
    };
    //根据数字正负来判断使用Math.ceiling还是Math.floor
    Number.AddMethod('integer',function(){
    return Math[this<0?'ceil':'floor'](this);
    })
    document.writeln((-10/3).integer());
  • 作用域的好处在于它可以访问外部函数的参数和变量(除了this和arguments,当然有变通的手法,比如外部函数this或者arguments赋值给外部函数的一个变量)
  • 闭包写法:
    • 你可以用闭包保护name这个变量,从而形成一个类似于私有变量的东西
    • 所谓闭包,简单来讲,就是函数可以访问它被创建时所处的上下文环境。 
      var getMyName=function(){
      var name='Troy';
      return {
      GetName:function(){
      return name;
      },
      SetName:function(newName){
      name=newName;
      }
      }
      }();//注意这里两个括号代表,这个最外围的函数被直接执行了,所以getName其实是里面的那个对象 getMyName.GetName();//结果为Troy
      getMyName.SetName("asd");
      getMyName.GetName();//结果为asd
  • 记忆功能实际上算是对递归的一种优化,就是在递归外用个数组样的容器去保存递归的数据。
  • 什么模块啊,柯里化其实就是对闭包的一种扩展,这里就不记录了
  • 一般我们用函数什么的时候可能会用到this,this指向的是最后一个调用此函数的对象。new一个函数对象,this就会指向新的对象。而new的函数对象里,如果return一个对象,那么产生的对象实际上是这个return的对象,this也就指向这个return的对象

最新文章

  1. php报表使用
  2. fuser命令小结
  3. JQuery操作Table元素
  4. lua字符匹配
  5. Nutch配置
  6. [SignalR]一个简单的聊天室
  7. 第三次冲刺spring会议(第四次会议)
  8. Graph Cut and Its Application in Computer Vision
  9. 补习系列(13)-springboot redis 与发布订阅
  10. 多线程深入:乐观锁与悲观锁以及乐观锁的一种实现方式-CAS(转)
  11. C#安装Telnet
  12. layer.js 中弹框显示不全的问题
  13. gflags命令行参数解析
  14. Python打包文件夹的方法小结(zip,tar,tar.gz等)
  15. TextAppearance.Material.Widget.Button.Inverse,Widget.Material.Button.Colored
  16. Greenplum-cc-web监控软件安装
  17. 如何使用 Flexbox 和 CSS Grid,实现高效布局
  18. QN-H618 遥控器复制再生仪(拷贝机)
  19. POJ 3278 Catch That Cow(简单BFS)
  20. java中Dao模式

热门文章

  1. android实现自动升级并安装打开
  2. zendStudio 10.5破解
  3. LeetCode: Unique Paths II 解题报告
  4. android Studio NDK
  5. Java 或者android 的加密技术
  6. xsocks 64位平台下编译问题小记
  7. MVC ASP.net流程 源代码分析
  8. Android客户端与PHP服务端交互(一)---框架概述
  9. Linux RPM 命令参数使用详解
  10. Warning: Multiple build commands for output file /xxx