您的位置:首页 > Web前端 > JavaScript

《JavaScript语言精粹》学习笔记——5.继承

2016-07-15 13:34 447 查看
前言

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、部件

从一套部件中把对象组装出来。一个可创建包含一系列的功能的函数,使一个对象具有某些组件的功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: