五、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对象的一部分。

JavaScript高级 引用类型(二)《JavaScript高级程序设计(第三版)》的更多相关文章

  1. JavaScript高级程序设计第三版.CHM【带实例】

    从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...

  2. 22.1 高级函数【JavaScript高级程序设计第三版】

    函数是JavaScript 中最有趣的部分之一.它们本质上是十分简单和过程化的,但也可以是非常复杂和动态的.一些额外的功能可以通过使用闭包来实现.此外,由于所有的函数都是对象,所以使用函数指针非常简单 ...

  3. JS高级程序设计第三版——变量、作用域和内存问题

    JavaScript变量: 由于JavaScript变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据类型值的规则,变量的值及其数据类型可 ...

  4. 4.1 基本类型和引用类型的值【JavaScript高级程序设计第三版】

    ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象. 在将一个值赋给变量时,解析器必须确定这个值是基 ...

  5. javascript高级程序设计第三版书摘

    在HTML 中使用JavaScript <script>元素 在使用<script>元素嵌入 JavaScript 代码时,只须为<script>指定 type 属 ...

  6. JavaScript高级程序设计第三版学习笔记(一)之数据类型区分详谈

    null.NaN.undefined三者的区别是什么? 在初次接触到JavaScript的时候,傻傻的分不清null.NaN.undefined三者到底区别何在,在实际的项目开发中也因为这个问题而困惑 ...

  7. JS高级程序设计第三版——在HTML中使用JavaScript

    使用<script>元素的方式 外部引用式.行内式.嵌入式. JavaScript引用放在<body>后面的原因 假如在文档的<head>元素中包含所有JavaSc ...

  8. JS高级程序设计第三版——JavaScript简介

    JavaScript简史 JavaScript由Netscape(网景)公司在1995年发布,最开始的主要目的是处理以前由服务器端语言负责的一些输入验证操作,以便提高用户体验,后来就慢慢的发展为一门强 ...

  9. 21.1 XMLHttpRequest 对象【JavaScript高级程序设计第三版】

    IE5 是第一款引入XHR 对象的浏览器.在IE5 中,XHR 对象是通过MSXML 库中的一个ActiveX对象实现的.因此,在IE 中可能会遇到三种不同版本的XHR 对象,即MSXML2.XMLH ...

  10. 14.5 富文本编辑【JavaScript高级程序设计第三版】

    富文本编辑,又称为WYSIWYG(What You See Is What You Get,所见即所得).在网页中编辑富文本内容,是人们对Web 应用程序最大的期待之一.虽然也没有规范,但在IE 最早 ...

随机推荐

  1. 关于微信网页调用js-sdk相关接口注意事项目(一级域名与二级域名互相干扰!!!)

    不知道有没有网友遇到过同一个web应用用不同的域名(一级或二级域名)在两个公众号中调用JSSDK相关接口实现功能, 这种做法本来没有问题,问题在于用二级域名(同属一级域名下的二级域名)绑定另一个web ...

  2. linux下shell脚本学习

    在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集,而且是一门非常棒的编程语言.您可以通过使用shell使大量的任务自动化,shel ...

  3. c#生成缩略图

    publicstaticvoidGenThumbnail(Image imageFrom,stringpathImageTo,intwidth,intheight)         {         ...

  4. English Notes

    1. Thanks for stopping by.慢走不送. 2. I don't like to judge a book by it's cover.我不喜欢以貌取人. 3. Rush hour ...

  5. cshell学习

    一. 文件的读写执行: 1)读:可以显示该文件的内容 2)写:可以编辑或者删除它 3)执行:如果该文件是一个shell脚本或者程序. 如果希望一次设置目录下所有文件的权限,可使用:chmod 644 ...

  6. Java SE 第九讲---面向对象特征之封装1

    1.面向对象程序设计的三大基本特征:继承(Inheritence).封装(Encapsulation).多态(Polymorphism) 2.封装:类包含数据与方法,将数据与方法放在一个类中就构成了封 ...

  7. 九度OJ1008

    这道题其实就是一个简单的Dijkstra变形,只是要考虑重边的情况. 当在更新图中点到起点的距离时,将花费p也计算在内:如果长度与之前计算的值相等,则再考虑此时花费p是否会更少,是的话则仍然要更新最短 ...

  8. 修复:"Failed to start Load Kernel Modules"

    使用非默认内核而出现的错误. [zsj@arch ~]$ systemctl --state=failed UNIT LOAD ACTIVE SUB DESCRIPTION● systemd-modu ...

  9. PetaPoco.Core.ttinclude修改

    /// <summary> /// Adds the singular rule. /// </summary> /// <param name="rule&q ...

  10. Qt下QWizard改变next,back等默认按钮的大小及背景

    默认的按钮又小又丑,想改大点漂亮点. 百度没百出来,最后用google 在这里: http://stackoverflow.com/questions/16425575/change-qwizard- ...