zoukankan      html  css  js  c++  java
  • JavaScript高级 引用类型(二)《JavaScript高级程序设计(第三版)》

    五、Function类型
    是JS中最重要的一种引用类型
    构造方式:(三种)
    函数声明:
    函数表达式定义:
    函数构造器:
    没有重载:
    如果有两个相同函数名的函数,执行时,执行最近被定义的一次。
    函数声明和函数表达式:
    函数声明和函数表达式两种常用创建函数的方式虽然作用一致,但是解析器在向执行环境中加载数据时是不一样的。
    alter( sum( 10 , 20 ) );
    var sum = function( a , b ){
        return a+b;
    }
    以上代码是错误的,在以上代码的初始化环境中,sum变量仅仅被定义为undefined。
    如果是用函数声明方式,那么在初始化环境中,就会执行载入函数,则不会执行错误。(如下:)
     
    alter( sum( 10 , 20 ) );
    function sum ( a , b ){
        return a+b;
    }
    作为值的函数:
    因为在上面的创建函数的过程中,函数名就是变量,那么函数可以作为值来使用。所以就可以把函数像值一样作数参数使用,也可以在函数中像值一样被返回。
    函数内部对象:
    arguments:类数组对象,包含所以传入的参数,此对象有个属性叫做callee(指针),指向拥有该对象的函数。
    function sum(){}   --> sum.arguments --> arguments.callee = sum
    实现递归解耦:
    this:它引用的是函数据以执行的环境对象。
    函数的名字仅仅是一个包含指针的变量
    函数属性和方法:
    caller:它保存了调用当前函数的函数的引用。
    length : 函数接收参数的个数
    prototype : 它保存了引用类型的所有实例方法,toString() / valueOf();
    apply(this,[parm1,parm2]) : 在特定的作用域调用函数。第一个参数this指当前环境对象(作用域对象),第二个参数可以是参数数组或者arguments对象。
     
    call(this,parm1,parm2:同上 ,区别在于接受参数方式不同。第一个参数this意涵相同,后面的参数需要逐一单独列举出来。
    ps:他们的最重要的作用是扩充函数的运行作用域。可以让函数在指定作用域下执行。极大的好处就是对象和方法不要任何耦合关系。
    bind() : 会创建一个函数的实例,该函数this的值会被绑定到给定的参数对象。
    这样的好处是 即使在全局作用域下,objectSayColor()的作用域仍然是a。
    继承的方法:(toLocalString()  、 toString()、valueOf()   )
     
     
    每个函数的这两个方法都会返回函数的代码,但是具体的格式因浏览器而异。
    六、基本包装类型
    这一点和java类似,JS也给几个基本类型提供了包装类型 以便于操作基本类型。(Boolean , Number , String)
    他们具有其他引用类型的共同特征,但是同时也具有他们各自基本类型的特殊行为。
    这就是一个自动包装的过程。
    他们和普通引用类型的最主要区别在于:生命周期。
    用new操作符创建实例的生命周期在执行流离开当前作用域之前一直存在。而自动创建的基本包装类对象,在执行流离开的一瞬间就销毁了。
    转型函数和new的包装类型是不一样的:
    Boolean类型:
    var a = new Boolean(false);
    alert( a && true ); //true
    这个实例中,一般会认为弹出false。实则不然,因为引用类型在布尔表达式中都会转化为true。
    其次:
    Number类型

    String类型
    String类型的实例化都有length属性
    也提供了一些方法:
    基本操作
    截取
    位置
    大小写
    字符串模式匹配
    search():如果没找到 返回-1且每次必须从头找
    替换
     
    分割
    fromCharCode()

    接收一个或多个字符编码,把他们转换成字符串
    七、单体内置对象
    一它是一种不依赖宿主环境的对象,这些对象在JS程序执行之前就已经存在了,简而言之,开发人员不需要实例化这些内置对象,直接可以使用。
    Global对象
    它在JS中实质上是一个“终极兜底对象”。它不属于任何对象的属性和方法,但是 所有的其他的对象都是他的属性和方法(事实上,并没有全局变量,其实所有的全局作用域下定义的属性和函数都是Global对象的属性)。
    URL编码/方法
    主要对地址字符串中一些浏览器无法接受的字符串进行编码。(一般情况下使用encodeURL()多一些,只对后面的参数编码)
    eval()方法
    这是JS中最强大的一个方法。它就像一个JS的解析器,执行要执行的JS字符串。在eval()方法执行时。它的参数(JS代码)也同样拥有eval()的执行环境对象,作用域链也一致。
    在使用时要注意其他用户代码注入攻击。
    Global对象的属性
    包括特殊值undefined、NaN、Infinity都是对象的属性,同时所有的原生引用类型的构造函数(Object、Function)也都是Global的属性。
    window对象
    在JS中没有明确指出如何访问Global,但是,在Web浏览器中,都是讲Global对象作为window对象的一部分加以实现的。所以可以把Global看作window。
    Math对象
    这是JS对数学公式和信息提供的一个公共位置--Math对象。
    Math对象的属性
    min()、max()
    四舍五入
    random()方法
    selectFrom()方法 --- 通过调用selectFrom(2,10)可以得到一个介于2和10(包括2,10)的数值。
    其他方法
    八、小结
    对象在JS中被称为引用类型的值,而且有一些内置的引用类型用来创建一些特定的对象。
    • 引用类型与传统面向对象编程的类相似,但是实现不同;
    • Object是一个基础类型,其他所有的类型都是从Object继承而来;
    • Array是一组值得有序列表、同时提供了操作这些值得功能;
    • Date类型提供了有关日期、时间的信息,以及相关操作功能;
    • RegExp类型是JS支持正则表达式的一个接口;
    • Function类型是所有函数的类(所有函数是Function类型的实例),所以函数也是对象,所以函数自身也拥有方法;
    • 基本包装类型Boolean、Number、String:每个包装类型都映射到同名的基本类型;在读取模式下访问基本类型时,会自动创建对应的基本包装类型以方便操作;一经操作完包装类型后,会立即销毁所创建的包装对象;
    • 在所有代码执行以前就存在两个对象Global和Math。特别在Web浏览器中,Global作为window对象的一部分。





  • 相关阅读:
    poj 2485 Highways 最小生成树
    hdu 3415 Max Sum of MaxKsubsequence
    poj 3026 Borg Maze
    poj 2823 Sliding Window 单调队列
    poj 1258 AgriNet
    hdu 1045 Fire Net (二分图匹配)
    poj 1789 Truck History MST(最小生成树)
    fafu 1181 割点
    减肥瘦身健康秘方
    人生的问题
  • 原文地址:https://www.cnblogs.com/jarl/p/5941409.html
Copyright © 2011-2022 走看看