《JavaScript语言精粹》学习笔记——5.继承
2016-07-15 13:34
447 查看
前言
JavaScript 提供了一套更为丰富的代码重用模式。代码重用模式可以减少软件开发的成本。本章介绍了几种直接的继承模式。
对象是类的实例,并且类可以从另一个类继承。JavaScript是一门基于原型的语言,意味着对象直接从其他对象继承。
1、伪类
JavaScript 对象从另一个对象继承,需要使用中间层,通过构造器函数产生对象。函数被创建时:
给函数增加 'inherits' 方法来隐藏 prototype。
2、对象说明符
构造函数的参数在个数过多的情况下,推荐使用对象说明符。将所有参数以一个对象的形式传递到函数内部。好处是参数的顺序可以任意,如果构造器使用默认值,有些参数可以忽略。
基于原型的继承:一个新对象可以继承一个旧对象的属性。
差异化继承:定制一个新对象,继承旧对象的属性,指明和它所基于的基本对象的不同。
4、函数化
继承模式不能保护隐私,父对象的所有属性对子对象都是可见的。想创建私有属性,可以应用模块模式。
构造一个生产对象的函数一般包括四个步骤:
a、创建一个新对象。构建对象字面量等。
b、定义私有实例变量和方法。
c、给新对象扩充方法。这些方法拥有特权,可以访问私有变量和方法。
d、返回新对象。
伪代码模板
<span style="font-size:18px;">var constructor = function (spec, my) {
var that, 其他的私有实例变量;
my = my || {};
把共享的变量和函数添加到my中
that = 一个新对象
添加给 that 的特权方法
return that;
}</span>spec对象包含构造器需要构造一个新实例的所有信息。my包含共享的变量。
在扩充 that 时,先将函数定义为私有方法,再分配给 that 。这样的好处是其他方法要调用该私有方法,可以直接调用,如果 that 的方法被破坏,该私有方法还可以继续使用。
“防伪”对象:对象的所有状态都是私有的,对象的属性可以被替换和删除,但对象的完整性不会受到损害。
“持久性”对象:对象的所有方法都不使用 this 或者 that ,对象的内部状态不能被更改。
5、部件
从一套部件中把对象组装出来。一个可创建包含一系列的功能的函数,使一个对象具有某些组件的功能。
JavaScript 提供了一套更为丰富的代码重用模式。代码重用模式可以减少软件开发的成本。本章介绍了几种直接的继承模式。
对象是类的实例,并且类可以从另一个类继承。JavaScript是一门基于原型的语言,意味着对象直接从其他对象继承。
1、伪类
JavaScript 对象从另一个对象继承,需要使用中间层,通过构造器函数产生对象。函数被创建时:
<span style="font-size:18px;">this.prototype = {constructor: this}</span>prototype 对象是存放继承特征的地方,constructor 没有什么用。
给函数增加 'inherits' 方法来隐藏 prototype。
<span style="font-size:18px;">Function.method('inherits', function (Parent) { this.prototype = new Parent(); return this; });</span>
<span style="font-size:18px;">var Mammal = function (name) { // 构造Mammal函数 this.name = name; } var Cat = function (name) { // 伪类Cat继承了Mammal函数 this.name = name; this.saying = 'meow'; }.inherits(Mammal);</span>构造器函数默认首字母大写,不推荐使用构造器新函数,即使用 new 创建新函数。原因是,如果忘记写 new ,程序不会报错,this 不能绑定到新对象上,而是绑定在全局对象中,引起错误。
2、对象说明符
构造函数的参数在个数过多的情况下,推荐使用对象说明符。将所有参数以一个对象的形式传递到函数内部。好处是参数的顺序可以任意,如果构造器使用默认值,有些参数可以忽略。
<span style="font-size:18px;">var myObject = maker({ first: f, middle: m, last: l, state: s, city: c })</span>3、原型
基于原型的继承:一个新对象可以继承一个旧对象的属性。
差异化继承:定制一个新对象,继承旧对象的属性,指明和它所基于的基本对象的不同。
4、函数化
继承模式不能保护隐私,父对象的所有属性对子对象都是可见的。想创建私有属性,可以应用模块模式。
构造一个生产对象的函数一般包括四个步骤:
a、创建一个新对象。构建对象字面量等。
b、定义私有实例变量和方法。
c、给新对象扩充方法。这些方法拥有特权,可以访问私有变量和方法。
d、返回新对象。
伪代码模板
<span style="font-size:18px;">var constructor = function (spec, my) {
var that, 其他的私有实例变量;
my = my || {};
把共享的变量和函数添加到my中
that = 一个新对象
添加给 that 的特权方法
return that;
}</span>spec对象包含构造器需要构造一个新实例的所有信息。my包含共享的变量。
在扩充 that 时,先将函数定义为私有方法,再分配给 that 。这样的好处是其他方法要调用该私有方法,可以直接调用,如果 that 的方法被破坏,该私有方法还可以继续使用。
“防伪”对象:对象的所有状态都是私有的,对象的属性可以被替换和删除,但对象的完整性不会受到损害。
“持久性”对象:对象的所有方法都不使用 this 或者 that ,对象的内部状态不能被更改。
5、部件
从一套部件中把对象组装出来。一个可创建包含一系列的功能的函数,使一个对象具有某些组件的功能。
相关文章推荐
- [转] FastJson---高性能JSON开发包
- javascript点击事件中的捕获/冒泡运用
- JavaScript 调试小技巧
- 《JavaScript高级程序设计》——字符串连接性能测试
- JavaScript操作JSON的方法总结,JSON字符串转换为JSON对象
- DOM中为事件添加事件处理程序的几种方式以及跨浏览器方式
- Jsp中out.println()与System.out.println()的区别
- JavaScript的几种继承方式
- 添加提前闭合标签 之后添加js可以执行js
- ArcGIS API for javascript(4.0)开发笔记 —— 自定义微件位置
- javascript语句——表达式语句、块语句、空语句和声明语句
- 无bug的ajaxfileupload.js
- ExtJs合并单元格
- 使用jackson来进行数组格式的json字符串转换成List。
- JS 动态加载脚本 执行回调
- Gson json,list,model互转
- JavaScript-HTML DOM
- javascript运算符——条件、逗号、赋值、()和void运算符
- 对HTML5新增JS Api的思考
- 1j2ee即web项目,严格意义上来说,没有jsp代码,只有class文件、html文件、javascript文件。2 基于extjs框架的项目怎么怎么查看在浏览器中展示的最终html页面的代码 3