【JS复习笔记】02 对象与函数

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

关于对象:

  • ||可以用来填充默认值,如: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
  • 记忆功能实际上算是对递归的一种优化,就是在递归外用个数组样的容器去保存递归的数据。
  • 什么模块啊,柯里化其实就是对闭包的一种扩展,这里就不记录了
时间: 2024-10-24 22:54:28

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

初探swift语言的学习笔记(类对象,函数)

swift扩展了很多功能和属性,有些也比较奇P.只有慢慢学习,通过经验慢慢总结了. 下面将初步学习一下类的写法. 码工,最大爱好就是看码,而不是文字,太枯燥. // // computer.swift // swiftDemo // // Created by apple on 14-6-8. // Copyright (c) 2014年 fengsh. All rights reserved. /* 写本例子的目的在于快速学习swift类的写法,包括知识点: 1.属性设置 2.构造.释构 3.

JavaScript复习笔记:Object(对象)

1:Js内置对象有 Number,Array,String,Date,Math 2:自定义对象 js提供了构建自定义对象.使用对象而不只是一个函数集合,是编写清洁,高效,可重复是的js代码的关键; 1)使用对象语法: 一个对象实际是只是一个容器,它将多个值,多个函数组合在一起.对象的值被称为属性,对象的函数被称为方法; ※使用new关键字创建对象 ex: var x = new Number('5') ※对象的使用:ObjectName.propertyName ->获取属性 ex: var s

R语言笔记 处理对象的函数

处理数据对象的实用函数 在本章末尾,我们来简要总结一下实用的数据对象处理函数(参见表2-3). 表2-3 处理数据对象的实用函数 函 数 用 途 length(object) 显示对象中元素/成分的数量 dim(object) 显示某个对象的维度 str(object) 显示某个对象的结构 class(object) 显示某个对象的类或类型 mode(object) 显示某个对象的模式 names(object) 显示某对象中各成分的名称 c(object, object,-) 将对象合并入一个

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

数字: JS只有一种数字类型,相当于double.(不知道为什么,我每次打double输入法都会出现逗比了三个字) NaN是一个数值,可以用isNaN(number)检测NaN Infinity表示所有大于一个非常大的数值的值 JS有一个对象Math,它包含一套作用于数字的方法. 字符串: Js中所有字符都是Unicode的,16位 Js没有字符类型,只需创建仅包含一个字符的字符串即可 反斜线,引号和控制字符可以用转义字符插到字符串中,如"A"==="\u0041"

【JS复习笔记】00 序

作为一个前端苦手,说是复习,你就当我是重学好了. 好吧,我当然不可能抱着一个砖头去复习,所以捡了本薄的来读——<JavaScript语言精粹>. 当初带我的人说这本书挺好,就看这本书好了.我觉得他说的挺对.我喜欢这么薄的书,言简意赅. 好吧,废话少说,来点正经的小总结. JavaScript是原型继承的,就是说它直接从其它对象继承属性.如果你对原型继承有点不懂,可以去看看原型模式,大概就是那个样子了. JavaScript依赖于全局变量进行连接.所有编译单元的顶级变量都被撮合到一个被称为全局对

【JS复习笔记】03 继承

关于继承 好吧,说到底JS还是原型继承的,而不是类继承.所以在这个上面要经常用到prototype去继承另一个对象. 所有的构造器函数都约定命名为首字母大写的形式,并且不以首字母大写的形式拼写任何其它的东西.当然一个更好的备选方案是根本就不用new.(太棒了,你说什么就是什么咯,我就当JS没这个东西了) 为什么呢,因为伪类模式就是一种画虎不成反类犬的模式,它试图去迎合我们这些玩类继承的程序员,但是其实它还有更多更好的选择. 那就是原型继承,然后创建对象的时候函数化,这样就可以对创建有私有变量的对

JS学习笔记02

学习新知识,探究新方法,是一个由"知器"-->"格物"-->"明理"-->"成道"依次演变的进化过程,需要循序渐进.由浅入深, 不过最终是否可以修炼成道骨仙风的"佛"家境界,则全凭个人的恒心.悟性和造化 百度和谷歌两大搜索引擎主页,表面看似简单,但内深藏玄机,其页面上的每一个像素点,用价值千金来形容,似乎也不为过.好了,下面我们用数据与事实说话,请看简单统计后的表格数据:  当用户打开网页

JS学习笔记(三)函数

js函数的声明方式为 function 函数名(参数列表) { // 函数体 return 返回值; } 调用 函数名(); (js中花括号喜欢用这种方式,因为在以前的浏览器中会在每行js代码的末尾添加分号,但现在的浏览器一般已经兼容这种写法,但仍保留这种习惯.) 需要注意的是只有在js的函数中声明的对象才具有块级作用域.函数中变量一定要定义,否则就是全局变量. 在解释js的时候,会先将其读入内存进行解释,再一步一步的从上到下的执行代码.js的函数也是变量值,即可以把函数赋值给变量. 1 fun

【JS复习笔记】06 方法

数组的方法: array.concat   一个数组去连接另一个数组,返回一个合成数组.var arrC=arrA.concat(arrB,'asd','sad',true,1.5); array.join       将数组用指定符号连接为一个字符串,并返回这个字符串.比用+快很多.var strA=arrA.join(",");//默认为逗号 array.pop       移除数组最后一个元素,并返回这个元素.var A=arrA.pop(); array.push     将一