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

关于对象:

  • ||可以用来填充默认值,如: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的对象

【JS复习笔记】02 对象与函数的更多相关文章

  1. JS自学笔记02

    JS自学笔记02 1.复习 js是一门解释性语言,遇到一行代码就执行一行代码 2.查阅mdn web文档 3.提示用户输入并接收,相比之下,alert只有提示的作用: prompt(字符串) 接收: ...

  2. 【JS复习笔记】03 继承(从ES5到ES6)

    前言 很久以前学习<Javascript语言精粹>时,写过一个关于js的系列学习笔记. 最近又跟别人讲什么原型和继承什么的,发现这些记忆有些模糊了,然后回头看自己这篇文章,觉得几年前的学习 ...

  3. 【JS复习笔记】03 继承

    关于继承 好吧,说到底JS还是原型继承的,而不是类继承.所以在这个上面要经常用到prototype去继承另一个对象. 所有的构造器函数都约定命名为首字母大写的形式,并且不以首字母大写的形式拼写任何其它 ...

  4. 【JS复习笔记】01 基本语法

    数字: JS只有一种数字类型,相当于double.(不知道为什么,我每次打double输入法都会出现逗比了三个字) NaN是一个数值,可以用isNaN(number)检测NaN Infinity表示所 ...

  5. 【JS复习笔记】00 序

    作为一个前端苦手,说是复习,你就当我是重学好了. 好吧,我当然不可能抱着一个砖头去复习,所以捡了本薄的来读——<JavaScript语言精粹>. 当初带我的人说这本书挺好,就看这本书好了. ...

  6. JS学习笔记(三)函数

    js中的方法名一般都是首字母小写,其余单词首字母大写的规范. 声明 function 函数名(参数列表) { // 函数体 return 返回值; } 调用 函数名(); (js中花括号喜欢用这种方式 ...

  7. Three.js学习笔记02

    1.改变相机的位置,让物体移动 通过下面的代码改变相机的位置: camera.position.x =camera.position.x +1; 将相机不断的沿着x轴移动1个单位,也就是相机向右移动. ...

  8. js复习笔记

    isNaN(x) 1.判断结果不是纯数字, var a=1234var b =isNan(a) //b是 false 因为a是纯数字 var a="abc123"var b =is ...

  9. JS学习笔记 (三) 对象进阶

    1.JS对象 1.1 JS对象特征 1.JS对象是基本数据数据类型之一,是一种复合值,可以看成若干属性的集合. 属性是名值对的形式(key:value) 属性名是字符串,因此可以把对象看成是字符串到值 ...

随机推荐

  1. How to get URL parameters with Javascript?

    function getURLParameter(name) { return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '( ...

  2. Eclipse无法启动报An internal error occurred during: "reload maven project". java.lang.NullPointerException

    由于没有正常关机导致eclipse无法将数据正常写入配置文件导致无法启动.报这样一个异常 An internal error occurred during: "reload maven p ...

  3. Web GIS 离线地图

    Web GIS 离线地图 1,基于瓦片的离线地图下载 博客园 阿凡卢 提供了离线地图的下载工具,下载地址:http://pan.baidu.com/s/1hqvQr7e 具体使用见 参考资料2 阿凡卢 ...

  4. jQuery超炫酷按钮插件及源码

    现在大部分网页的按钮都是经过美化的,那些原始的浏览器按钮太过于枯燥乏味,让用户失去和网站交互的兴趣.早期我们都是通过背景图片来美化网页按钮,而现在我们可以利用扩展性更好的CSS3来制作漂亮的网页按钮, ...

  5. SQL调优 - Hints指定索引 解决慢查询案例

    背景 每当交易高峰时期,可能会暴露一些平时无法发现的问题,机遇和挑战并存.下面聊聊最近解决的一个案例,因为执行计划走错导致慢查询,进而引发应用线程阻塞.线程池爆满,最后应用功能瘫痪.如何标本兼治的解决 ...

  6. ios面试技术要点

    iOS面试 技术总结点(可参考):多线程 运行时 runloop app框架 几种动画编程 jsonmodel原理 sdwebimage原理 masonry怎么应用及原理 应用框架有哪些 说一下Fac ...

  7. CentOS 编译安装 mysql

    1.前期准备 1.1 环境说明: 操作系统: CentOS release 6.4 (Final) [查看命令 cat /etc/redhat-release ] mysql : mysql-5.6. ...

  8. 解决rspec 生成报告时报utf-8错误的方法

    找到gems\1.9.1\gems\rspec-core-2.14.3\lib\rspec\core\formatters\snippet_extractor.rb文件中的第27行: 在这边记录一下, ...

  9. jQuery+Superfish制作下拉菜单

    superfish制作下拉菜单真的很方便而好很好用,而且还可以通过Superfish提供的参数来控制下拉菜单的不同效果,而且他没有层级限制,换句话说可以通过Superfish来写你想要的层级菜单. 官 ...

  10. mysql安装出现error Nr.1045 (转)

    http://www.cnblogs.com/Ivan-j2ee/archive/2012/09/22/2698278.html 我们在windows下安装mysql时会出现Access denied ...