JavaScript高级程序设计15.pdf

组合继承的问题是会调用2次超类型构造函数

寄生组合式继承

即通过借用构造函数来继承属性,通过原型链的形式来继承方法,思路:不必为了指定子类型的原型而调用超类型的原型,我们所需要的无非是超类型原型的一个副本而已

function inheritPrototype(subType,superType){

  var prototype=object(subType.prototype);  //创建对象

  prototype.constructor=subType;       //增强对象

  subType.prototype=prototype;        //指定对象

}

第7章 函数表达式

定义函数有两种方式:函数声明和函数表达式

函数声明 function functionName(arg0,arg1,arg2){

    //函数体

}

函数声明提前:执行代码前会先读取函数声明

函数表达式 var functionName=function(arg0,arg1,arg2){

    //函数体

};

由于函数声明提前的存在,最好在函数体内使用函数表达式而非函数声明

递归函数就是一个函数通过名字调用自身的情况下构成的

arguments.callee指向一个正在执行的函数的指针,可以用它来实现对函数的递归调用

闭包是指有权访问另一个函数作用域中的变量的函数

作用域链的概念:当某个函数第一次被调用,会创建一个执行环境及相应的作用域链,并把作用域链赋值给一个特殊的内部属性(即[[Scope]])。然后,使用this、arguments和其它参数的值来初始化函数的活动对象。但在作用域链中,外部的函数活动对象始终处于第二位,以此类推直到作用域链的终点为全局执行环境

作用域链本质上是一个指向变量对象的指针列表,它只引用但不实际包含变量对象

由于闭包会携带包含它的函数的作用域,因此会占用更多内存,需要谨慎使用

闭包的这种配置机制引出了一个问题,即闭包只能取得包含函数中任何变量的最后一个值,我们可以创建另一个匿名函数强制让闭包的行为符合预期

在闭包中使用this可能会导致一些问题,我们知道,this对象在运行时是基于函数的执行环境绑定的:在全局函数中,this等于window,而当函数被作为某个对象的方法调用时,this等于那个对象,匿名函数的执行环境具有全局性,因此其this对象通常指向window

内存泄漏:闭包会引用包含函数的整个活动对象,把变量设置为null,可以解除引用,回收其占用的内存

模仿块级作用域:JavaScript中没有块级作用域规定,只要变量定义在一个函数的活动对象中,就可以在函数内部随处访问它

(function(){

  //这里是块级作用域

}) ();

特权方法:我们把有权访问私有变量和私有函数的公有方法称为特权方法,在函数中定义特权方法有一个缺点,那就是你必须使用构造函数模式来达到这个目的,第6章提到过,构造函数会重复创建一组新方法

静态私有变量:在之前的模拟块级作用域中定义一个全局构造函数(使用函数表达式并不使用var),然后在这个构造函数的原型中定义特权方法,这样所有实例共享一个特权方法,对原型的修改也会反映到所有实例

模块模式
模块模式则是为单例创建私有变量和特权方法,所谓单例就是只有一个实例的对象,声明并赋值一个函数给变量,这个函数里拥有私有变量和函数,return对象字面量(这个字面量对象可以访问到私有变量和私有函数)

简言之,如果必须创建一个对象并以某些数据对其进行初始化,同时还要公开一些能够访问这些私有数据的方法,那么就可以使用模块模式,以这种方式创建的单例都是Object的实例

增强的模块模式

进一步改进了模块模式,在返回对象之前加入对其增强的代码

JavaScript高级程序设计15.pdf,布布扣,bubuko.com

时间: 2024-10-11 07:41:52

JavaScript高级程序设计15.pdf的相关文章

JavaScript高级程序设计58.pdf

15章 使用Canvas绘图 略 16章 HTML5脚本编程 HTML5规范了新的HTML标记和JavaScript API,以便简化创建动态Web界面的工作 跨文档消息传递 简称XDM,指来自不同域的页面间传递消息(比如www.wrox.com域中页面与p2p.wrox.com) XDM的核心是postMessage()方法,目的是向另一个地方传递信息,“另一个地方”指的是包含在当前页面中的<iframe>元素或者当前页面弹出的窗口 postMessage()方法接收2个参数:一条消息和一个

JavaScript高级程序设计51.pdf

(续上篇) 模拟鼠标事件 var btn=document.getElementById("myBtn"); //创建事件对象 var event=document.createEvent("MouseEvents"); //初始化事件对象 event.initMouseEvent("click",true,true,document.defaultView,0,0,0,0,0,false,false,false,false,0,null); /

JavaScript高级程序设计48.pdf

设备中的键盘事件 任天堂Wii等设备可以通过键码知道用户按下了哪个键 复合事件 复合事件是DOM3级事件新添加的一类事件,用于处理IME的输入序列.IME(Input Method Editor,输入法编辑器)可以让用户输入在物理键盘上找不到的字符,IME通常需要同时按住多个键,但最终只输入一个字符,有3种复合事件 compositionstart:在IME的文本复合系统打开时触发,表示要开始输入了 compositionupdate:向输入字段插入新字符时触发 compositionend:在

JavaScript高级程序设计35.pdf

遍历 "DOM2级遍历和范围"模块定义了两个用于辅助完成顺序遍历DOM结构的类型:NodeIterator和TreeWalker,两个类型能够基于给定的起点对DOM结构执行深度优先(depth-first)的遍历操作,与DOM兼容的浏览器都可以访问到这些类型的对象,IE不支持DOM遍历 使用以下代码检测浏览器对DOM2级的遍历支持情况: var supportsTraversals=document.implementation.hasFeature("Traversal&q

JavaScript高级程序设计31.pdf

其它方面的变化 DOM的其他部分在"DOM2级核心"中也发生了一些变化,这些变化与XML命名空间无关,而是确保API的可靠性及完整性 DocumentType类型的变化 DocumentType类型新增了3个属性:publicId.systemId和internalSubset 其中前两个属性表示的是文档类型声明中的两个信息段,这两个信息段在DOM1级中没有办法访问到 alert(document.doctype.publicId); //文档类型声明PUBLIC后的字符串 alert

JavaScript高级程序设计29.pdf

insertAdjacentHTML方法 插入标记最后一个新增的方式是insertAdjacentHTML()方法,它接收两个参数:插入位置和要插入的HTML文本,第一个参数必须是下列值之一: "beforebegin",在当前元素之前插入一个相邻的同辈元素: "afterbegin",在当前元素之下插入一个新的子元素或在第一个子元素之前再插入新的子元素: "beforeend",在当前元素之下插入一个新的子元素或在最后一个子元素之后再插入新的子

JavaScript高级程序设计24.pdf

Element类型 Element类型用于表现XML或HTML元素,提供对元素标签名.子节点及特性的访问,它具有以下特征 nodeType的值为1: nodeName的值为元素的标签名: nodeValue的值为null: parentNode可能是Document或Element: 要访问元素的标签名可以使用nodeName属性或者tagName属性,两者返回相同的值 <div id="myDiv"></div> var div=document.getEle

JavaScript高级程序设计38.pdf

比较DOM范围 在有多个范围的情况下,可以使用compareBoundaryPoints()方法来确认这些范围是否有公共的边界,接收两个参数:表示比较方式的常量值和要比较的范围 常量如下 Range.START_TO_START(0):比较第一个范围和第二个范围的起点:Range.START_TO_END(1):比较第一个范围的起点和第二个范围的终点:Range.END_TO_END(2):比较第一个范围和第二个范围的终点:Range.END_TO_START(3):比较第一个范围的终点和第二个

JavaScript高级程序设计39.pdf

第13章 事件 JavaScript与HTML之间的交互式通过事件来实现的. 事件流 事件流描述的是从页面中接收事件的顺序,IE和Netscape提出了完全相反的事件流概念,IE是事件冒泡流,Netscape是事件捕获流 事件冒泡 click一个<div>元素,click事件沿DOM树向上传播,在每一级节点都会发生,直至传播到document对象,现代浏览器则将事件冒泡到window对象 事件捕获 click一个<div>元素,click事件沿DOM树依次向下,直到传播到事件的实际