《JavaScript语言精粹》学习笔记——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、部件

从一套部件中把对象组装出来。一个可创建包含一系列的功能的函数,使一个对象具有某些组件的功能。











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值