第五章 继承

在JS中可能的继承模式有很多。在本章中,我们将研究几种最为直接的模式。当然还有很多更为复杂的构造模式,但保持简单通常是最好的。

1. 伪类

var Mammal = function (name){
    this.name = name;
}

Mammal.prototype.getName = function (){
    return this.name;
};

Mammal.prototype.says = function (){
    return this.saying || '';
};

var myMammal = new Mammal('hello the mammal');

var name = myMammal.getName();

现在,我们可以构造另一个伪类来继承Mammal,这是通过定义他的 constructor 函数并替换它的 prototype 为一个Mammal的实例来实现的。

var Cat = function(name){
    this.name = name;
    this.saying = 'meow';
}

//替换Cat.prototype 为一个新的 Mammal 实例

Cat.prototype = new Mammal();

//扩充新原型,增加 purr 和 get_name 方法

Cat.prototype.purr = function(n) {
    var i, s = '';
    for( i = 0; i < n; i ++ ){
        if(s){
            s += '-'
        }
        s += 'r';
    }
    return s;
}

Cat.prototype.getName = function(){
    return this.says() + ' ' + this.name + ' ' + this.says();
}

var myCar = new Cat('Henrietta');
var says = myCar.says();
var purr = myCar.purr(5);
var name = myCar.getName();

"伪类"形式可以给不熟悉js的程序员提供便利,但它也隐藏了该语言的真实的本质。借鉴类的表示法可能误导程序员去编写过于深入与复杂的层次结构。

2 对象说明符

有时候,构造期要接受一大串参数,这可能令人烦恼。

我本人深有体会,之前写的函数里接受的参数比较多,导致别人不好调用。

所以,最好的方法:

var parame = {
    first: f,
    middle: m,
    last: l,
    state: s,
    city: c
}

var myObject = maker(parame);
  1. 原型

基于原型的继承

  1. 函数化
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.继承(接口继承和实现继承) 继承是 OO 语言中的一个最为人津津乐道的概念。许多 OO 语言都支持两种继承方式...
    believedream阅读 4,556评论 0 3
  • 特别说明,为便于查阅,文章转自https://github.com/getify/You-Dont-Know-JS...
    杀破狼real阅读 4,866评论 0 4
  • 本章内容 理解对象属性 理解并创建对象 理解继承 面向对象语言有一个标志,那就是它们都有类的概念,而通过类可以创建...
    闷油瓶小张阅读 4,355评论 0 1
  • 基于这篇文章的一些名称约定: 上面的约定应该是比较合理的,如果难以理解,可以查看黯羽轻扬:JS学习笔记2_面向对象...
    一直玩编程阅读 3,561评论 1 7
  • 她的眼神一点一点变坏,成就了我命运的意外。逃离了我生活的 云海,她变成了她理想的自在。而也依然现在马路牙子之外,风...
    李一十八阅读 1,297评论 0 1

友情链接更多精彩内容