《JavaScript高级程序设计》第6-7章

第六章 面向对象的程序设计

1、理解对象:无序属性的集合,其属性可以包含基本值、对象或者函数

1)属性类型:

数据属性:4个特性——[[Configurable]]表示能否通过delete删除属性从而重新定义属性,能否删除属性的特性,或者能否把属性修改为访问器属性,这个特性默认值为true;[[Enumerable]]表示能否通过for-in循环返回属性,这个特性默认值为true;[[Writable]]表示能否修改属性的值,这个特性默认值为true;[[Value]]包含这个属性的数据值,读取属性值的时候从这个位置读,写入属性值的时候把新值保存在这个位置;要修改属性默认的特性,必须使用ECMAScript5的object.defineProperty()方法,接收三个参数——属性所在的对象、属性的名字和一个描述符对象

访问器属性:不包含数据值,包含一对getter和setter函数,在读取访问器属性时,会调用getter函数,这个函数负责返回有效的值;在写入访问器属性时,会调用setter函数并传入新值,这个函数负责决定如何处理数据;4个特性——[[Configurable]]表示能否通过delete删除属性从而重新定义属性,能否删除属性的特性,或者能否把属性修改为访问器属性,这个特性默认值为true;[[Enumerable]]表示能否通过for-in循环返回属性,这个特性默认值为true;[[Get]]在读取属性时调用的函数,这个特性默认值为undefined;[[Set]]在写入属性时调用的函数,这个特性默认值为undefined;要修改属性默认的特性,必须使用ECMAScript5的object.defineProperty()方法,接收三个参数——属性所在的对象、属性的名字和一个描述符对象

2)定义多个属性:ECMAScript5定义了object.defineProperties()方法用于定义多个属性,接收两个参数——要添加和修改其属性的对象和要添加和修改其属性的对象的属性,IE9+、Firefox4+、Safari5+、Opera12+、Chrome有效

3)读取属性的特性:ECMAScript5定义了object.getOwnPropertyDescriptor()方法用于取得给定属性的描述符,接收两个属性——属性所在的对象和要读取其描述符的属性名称

2、创建对象

1)工厂模式:用函数来封装以特定接口创建对象的细节

2)构造函数模式:

没有显式地创建对象;直接将属性和方法赋给了this对象;没有return语句

调用构造函数的4个步骤——创建一个新对象;将构造函数的作用域赋给新对象(this指向这个新对象);执行构造函数中的代码(为这个新对象添加);返回新对象

构造函数与其他函数的区别:构造函数应该以一个大写字母开头,非构造函数则应该以一个小写字母开头;构造函数通过new操作符来调用;构造函数的每个方法都要在每个实例上重新创建

3)原型模式

3、继承:ECMAScript只支持实现继承

第七章 函数表达式

函数声明:function functionName(arg0,arg1,arg2){//函数体},在执行代码之前会先读取函数声明

函数表达式:var functionName=function(arg0,arg1,arg2){//函数体},这个情况下创建的函数叫做匿名函数(拉姆达函数)

1、递归:

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

function factorial(num){

f(num <= 1){

return1;

}else{

return num*arguments.callee(num-1);

}

}

在严格模式下,不能通过脚本访问arguments.callee

var factorial=(function f(num){

f(num <= 1){

return1;

}else{

return num*f(num-1);

}

});

2、闭包:有权访问另一个函数作用域中的变量的函数;创建闭包的常见方式,就是在一个函数内部创建另一个函数

3、模仿块级作用域:块级作用域(私有作用域)的匿名函数:(function(){//这里是块级作用域})();

4、私有变量:包括函数的参数、局部变量和在函数内部定义的其他函数;特权方法:有权访问私有变量和私有函数的公有方法;

在构造函数中定义特权方法:

function MyObject(){

//私有变量和私有函数

var privateVariable=10;

Function privateFunction(){

return false;

}

//特权方法

this.publicMethod=function(){

privateVariable++;

return privateFunction();

};

}

静态私有变量:通过在私有作用域中为自定义类型定义私有变量或函数以及特权方法,这个模式与在构造函数中定义特权方法的主要区别,就在于私有变量和函数是由实例共享的。其基本模式如下:

(function(){

//私有变量和私有函数

var privateVariable=10;

function privateFunction(){

return false;

}

//构造函数

MyObject=function(){

};

//公有/特权方法

MyObject.prototype.publicMethod=function(){

privateVariable++;

return privateFunction();

};

})();

模块模式:为单例创建私有变量和特权方法;单例:指的就是只有一个实例的对象,JavaScript是以对象字面量的方式来创建单例对象。其基本模式如下:

var singleton=function(){

//私有变量和私有函数

var privateVariable=10;

function privateFunction(){

return false;

}

//特权/公有方法和属性

return{

publicProperty:true;

publicMethod:function(){

privateVariable++;

return privateFunction();

}

};

}();

增强的模块模式

var singleton=function(){

//私有变量和私有函数

var privateVariable=10;

function privateFunction(){

return false;

}

//创建对象

var object=new CustomType();

//添加特权/公有方法和属性

object.publicProperty=true;

publicMethod=function(){

privateVariable++;

return privateFunction();

};

//返回这个对象

return object;

}();

时间: 2024-12-28 20:47:59

《JavaScript高级程序设计》第6-7章的相关文章

构建之法五、六章读后感

在本周我主要学习了构建之法的第五章和第六章,第五章主要讲述团队和流程,第六章主要讲述敏捷流程: 软件团队的模式有:主治医师模式.明星模式.社区模式.业余剧团模式.秘密团队.特工团队.交响乐团模式.爵士乐模式.功能团队模式.官僚模式: 开发流程包括:写了再改模式.瀑布模型.瀑布模型的变形(生鱼片模型.大瀑布带着小瀑布): Rational Unified Process统一流程(RUP):包括业务建模.需求.分析和设计.实现.测试.部署.配置和变更管理.项目管理.环境: RUP的四个阶段包括:初始

构建之法读后感----第1章 绪论

首先,文章对于程序.用户需求.工程等等概念用了阿超给儿子编写的一个出题程序来分别解释了个中的含义,尤其是程序和工程的区别,程序大概就是用很多语言或工具编写的一个简单能实现目标要求的一行行代码,而工程就是在这个程序的基础上不断满足用户的需求.修复程序的bug.提供后续维护等服务. 需求分析:梳理需求,逐步展开后续工作,如设计(软件架构).实现(写数据结构和算法),测试,发布软件 软件=程序+软件工程(软件企业=软件+商业模式) 软将工程的核心部分:构建管理.源代码管理.软件设计.软件测试.项目管理

《构建之法》第十七章读后感

通过阅读<构建之法>第十七章,不能说对我造成了什么深远的影响,但是还是感触颇深: 第一,工作分配的重要性,说道工作分配,不得不说我们个小组的组长们,组长不仅仅是一个团队的领导者,更是这个团队的灵魂.它不仅需要了解随时掌握各组员的动向,更重要的是,他需要了解各组员的能力,然后根据个人的能力,然后再去非陪相应的任务,只要这样才能做到“物尽其用”,才能更好的完成我们的项目,有时甚者能更创造出以外的效果,达到更完美的状态.这不仅是组长的能力  其实其无时无刻也体现着我们这个小组的团结力和创造力.当初选

《构建之法》第三章学习心得

这周我学习了<构建之法>第三章,讲述了软件工程师的成长.软件系统的绝大部分模块都是由个人开发或维护的.在软件工程的术语中,这些单个的成员叫做Individ-ual Contributor(IC).IC在团队中的流程是怎么样的呢?以开发人员为例,流程如下. 1.通过交流.实验.快速原型等方法,理解问题.需求或任务 2.提出多种解决办法并估计工作量 3.其中包括寻找以前的解决方案,因为很多工作是重复性的 与相关角色交流解决问题的提案,决定一个可行的方案 执行,把想法变成实际中能工作的代码,同时验证

阅读《构建之法》第四章感想

课下阅读<构建之法>第四章,自己有以下一些感想. 1.我们写的代码最终都是要给人看的,所以代码规范化是一个优秀编程员必备的良好习惯,而且若是在团队里工作,那么代码规范更加重要.编程人员要遵循的代码风格的原则是:简明,易读,无二义性.以后自己要养成规范代码的习惯. 2.复审也是不可缺少的一个步骤,软件工程中最基本的复审手段就是同伴复审,找熟悉代码,有经验的人来进行复审. 3.当今时代,一个人能发挥的力量越来越小,团队的力量日渐重要,因此,如何合作,很关键.两个人合作,如何影响对方,要因人而异,因

《构建之法》第四章

<构建之法>第四章讲的是两个人的合作.结对编程.结对编程往往只需花费大约一半的时间就能编写出质量更高的代码. 代码规范方面,在给函数或者类取名的时候要严谨,不能写一些没意义的名称:在一些代码后面可以加些注释来说明此行代码的作用,在复审方面,我觉得自我复审时最好的,刚写好的代码脑袋里印象深刻,能很好的解决逻辑错误和算法错误. 结对编程方面,书中生动形象的说明了开发者的搭档关系,在结对的时候怎么分配任务,怎么通力合作.互相帮助,在两人的合作过程中,怎么磨合.互相提高水平,在遇到问题或者矛盾的时候,

构建之法1,5,17章读后感触

看了构建之法1,5,17章的内容,我对团队有了新认识.在一个团队中,不同成员来自五湖四海,为了一个目标,走到了一起.所以,需要的是全身心的投入.但人资历,成绩,口碑有差别,这就有了好/中/差,三等待遇,所以付出的努力不同,得到的待遇自然而然也就不同. 在我们这次软工中,我们需要一个真团队,高效的团队,来互相提升帮助我们完成这些任务.在这过程中,我们需要负担起身上的责任和要对伙伴负责.这样才能让团队走向成功

《构建之法》第四章读后感--软件工程

<构建之法>第四章读后感--两人合作 1.代码风格很重要,因为良好的代码风格,有益于两人的合作甚至多人的合作. 个人认为 : 良好的代码风格的培养就是 多去阅读别人的优秀代码 ,用于提高并且培养自己的代码风格. 2.关于结对编程的重要性 2.1 结对编程能提高设计质量与代码质量 2.2 结对有益于学习交流 3.如何结对编程 3.1 主动参与讨论,提出设计方案或者问题的解决方案 4.代码的复审 复审可以提高代码质量,优化项目性能.

《构建之法》第四章---阅读总结

<构建之法>第四章---阅读总结 前言 看到这个章节的名字,我想起了之前老师叫我们看的<硅谷传奇>,原来老师是想让我们在学这一章节之前先了解两人合作的重要性.确实,软件工程既然能带上“工程”二字,那就说明它并不是一个人的事情,软件工程离不开团队合作,而团队合作的最简形态就是两人合作.由<硅谷传奇>可知,一个好的合作伙伴是多么重要,两人能有着共同的追求,又能包容对方的性格,各施其长后能力就不再是简单的1加1了. 分析与理解 本章节围绕“两人合作”的中心,主要讲解了编程规范

20179215 《构建之法》第三章

<构建之法>第三章 读书笔记 ?本章为软件工程师的成长,主要介绍了评价软件工程师水平的主要方法,技能的反面,TSP对个人的要求. 一.个人能力的衡量与发展 ?软件开发流程:软件开发流程包括团队的流程,也包括个人的流程 ?软件系统的绝大部分模块都是由个人开发或维护的.在软件工程的术语中,我们把这些单个的成员叫做Individ-ual Contributor(IC).IC在团队中的流程如下. 通过交流.实验.快速原型等方法,理解问题.需求或任务 提出多种解决办法并估计工作量 其中包括寻找以前的解决