`
zdb_cn
  • 浏览: 123875 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

javascript设计模式 第四章

 
阅读更多

继承

 

父类

/* Class Person. */

function Person(name) {
  this.name = name;
}

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

var reader = new Person('John Smith');
reader.getName();

 1、原型链

/* Class Author. */

function Author(name, books) {
  Person.call(this, name); // Call the superclass' constructor in the scope of this.
  this.books = books; // Add an attribute to Author.
}

Author.prototype = new Person(); // Set up the prototype chain.
Author.prototype.constructor = Author; // Set the constructor attribute to Author.
Author.prototype.getBooks = function() { // Add a method to Author.
  return this.books;
};

var author = [];
author[0] = new Author('Dustin Diaz', ['JavaScript Design Patterns']);
author[1] = new Author('Ross Harmes', ['JavaScript Design Patterns']);

author[1].getName();
author[1].getBooks();

 2、extend函数

将派生子类的整个过程包装在一个名为extend的函数中。

/* Extend function. */

function extend(subClass, superClass) {
  var F = function() {};
  F.prototype = superClass.prototype;
  subClass.prototype = new F();
  subClass.prototype.constructor = subClass;
}

/* Class Author. */

function Author(name, books) {
  Person.call(this, name);
  this.books = books;
}
extend(Author, Person);

Author.prototype.getBooks = function() {
  return this.books;
};

 改进后代码:

/* Extend function, improved. */

function extend(subClass, superClass) {
  var F = function() {};
  F.prototype = superClass.prototype;
  subClass.prototype = new F();
  subClass.prototype.constructor = subClass;

  subClass.superclass = superClass.prototype;
  if(superClass.prototype.constructor == Object.prototype.constructor) {
    superClass.prototype.constructor = superClass;
  }
}


/* Class Author. */

function Author(name, books) {
  Author.superclass.constructor.call(this, name);
  this.books = books;
}
extend(Author, Person);

Author.prototype.getBooks = function() {
  return this.books;
};

Author.prototype.getName = function() {
  var name = Author.superclass.getName.call(this);
  return name + ', Author of ' + this.getBooks().join(', ');
};

 3、掺元类

/* Mixin class. */

var Mixin = function() {};
Mixin.prototype = {
  serialize: function() {
    var output = [];
    for(key in this) {
      output.push(key + ': ' + this[key]);
    }
    return output.join(', ');
  }
};

augment(Author, Mixin);

var author = new Author('Ross Harmes', ['JavaScript Design Patterns']);
var serializedString = author.serialize();

/* Augment function. */

function augment(receivingClass, givingClass) {
  for(methodName in givingClass.prototype) { 
    if(!receivingClass.prototype[methodName]) {
      receivingClass.prototype[methodName] = givingClass.prototype[methodName];
    }
  }
}

/* Augment function, improved. */

function augment(receivingClass, givingClass) {
  if(arguments[2]) { // Only give certain methods.
    for(var i = 2, len = arguments.length; i < len; i++) {
      receivingClass.prototype[arguments[i]] = givingClass.prototype[arguments[i]];
    }
  } 
  else { // Give all methods.
    for(methodName in givingClass.prototype) { 
      if(!receivingClass.prototype[methodName]) {
        receivingClass.prototype[methodName] = givingClass.prototype[methodName];
      }
    }
  }
}
 

继承  耗费内存一些

原型  set 和 get 注意要统一

掺元  扩展类

 

 

分享到:
评论

相关推荐

    Javascript 设计模式 电子书

    因此,通过学习JavaScript设计模式,Web开发人员能够更好地组织代码,写出更加健壮且易于维护的JavaScript应用程序。 《Javascript 设计模式》电子书深入讲解了JavaScript开发原理以及在客户端脚本开发中的设计模式...

    Javascript 设计模式 很经典 第一本

    ### JavaScript设计模式经典知识点概述 #### 一、书籍简介与背景 《Pro JavaScript Design Patterns》是一本关于JavaScript设计模式的经典著作,由Ross Harmes和Dustin Diaz共同编写,并于2008年出版。该书深入浅出...

    常用的Javascript设计模式.pdf

    ### 常用的Javascript设计模式 #### 一、单例模式详解 单例模式是一种常用的软件设计模式,它的核心思想在于确保一个类只有一个实例,并提供一个全局访问点。这种模式在JavaScript这样的“无类”语言中尤为重要。...

    Javascript 设计模式系统讲解与应用视频资源地址.7z

    JavaScript设计模式是编程实践中的一种重要思想,它提供了一套经过时间考验的最佳实践,用来解决常见的编程问题和提高代码的可维护性、可扩展性和可复用性。在JavaScript这种动态类型的脚本语言中,设计模式尤其重要...

    javascript 设计模式 电子书 英文版

    - **第4章:组合**:讲解了组合模式的概念及其在JavaScript中的应用。 - **第5章:模块模式**:介绍了一种用于创建私有作用域和公有API的强大模式——模块模式。 - **第6章:工厂模式**:阐述了如何使用工厂模式来...

    学用 JavaScript 设计模式

    具体到JavaScript设计模式,有多种类型可以利用,包括: 1. 构造器模式:通过构造函数创建对象,并通过new操作符实例化对象。 2. 模块化模式:这是一种封装和组织代码的方式,通过立即执行函数表达式(IIFE)创建...

    JavaScript设计模式中文版第4章-继承.pdf

    JavaScript设计模式中的继承机制是其面向对象编程的重要组成部分。继承允许子类继承父类的属性和方法,从而减少代码重复并提高代码复用性。在JavaScript中,继承并不像Java或C++等语言那样简单地使用一个关键字,...

    JavaScript设计模式中文版第4章-继承定义.pdf

    这种继承方式被称为原型链继承,是JavaScript中最常见的继承模式。然而,它也有一些缺点,比如当父类的属性或方法被多个子类共享时,会创建多个副本,占用额外的内存。 为了避免这些问题,还可以采用其他继承策略,...

    JavaScript模式中文[pdf] 百度云

     第4章 函数  背景  回调模式  返回函数  自定义函数  即时函数  即时对象初始化  初始化时分支  函数属性——备忘模式  配置对象  Curry  小结  第5章 对象创建模式  命名空间模式  声明依赖关系  ...

    JavaScript_设计模式_中文版_第3章-封装和信息隐藏

    JavaScript设计模式中的封装和信息隐藏是面向对象编程中至关重要的概念。封装是将对象的内部状态(数据)和行为(方法)结合在一起,对外提供一个有限的接口进行交互,以此来保护内部数据的完整性和安全性。信息隐藏...

    ASP.NET设计模式-杨明军译(源码)

    第4章 业务逻辑层:组织 4.1 理解业务组织模式 4.1.1 Transaction Script 4.1.2 Active Record 4.1.3 Domain Model 4.1.4 Anemic Domain Model 4.1.5 领域驱动设计 4.2 小结 第5章 业务逻辑层:模式 5.1 ...

    JavaScript设计模式之代理模式简单实例教程

    **JavaScript设计模式之代理模式详解** 代理模式是一种在软件设计中常见的模式,它允许我们创建一个代表原始对象的代理对象,以控制对原始对象的访问。代理对象可以在调用实际对象的方法之前或之后添加额外的功能,...

    Adapter适配器模式在JavaScript设计模式编程中的运用分析_.docx

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在JavaScript编程中,这种模式尤其适用于处理不同API之间的兼容性问题,比如在AJAX请求中,需要对接不同的日志记录系统,或者整合第三方库时。...

    JavaScript高级程序设计第四版-示例代码

    《JavaScript高级程序设计》是JavaScript编程领域的一本经典著作,其第四版更是涵盖了现代JavaScript的诸多新特性。这本书深入探讨了JavaScript的核心概念、语法以及在Web开发中的应用,旨在帮助开发者提升...

    JavaScript模式 斯托扬·斯特凡洛夫 著

    第4章 函数 背景 回调模式 返回函数 自定义函数 即时函数 即时对象初始化 初始化时分支 函数属性——备忘模式 配置对象 Curry 小结 第5章 对象创建模式 命名空间模式 声明依赖关系 私有属性和方法 模块模式 沙箱模式...

    JavaScript 王者归来第一章WORD版

    通过以上分析可以看出,《JavaScript王者归来》第一章从多个角度深入探讨了JavaScript的选择理由、应用场景以及合理使用的策略。这对于初学者和专业人士来说都是一份宝贵的指南,有助于他们在实际项目中更加高效地...

Global site tag (gtag.js) - Google Analytics